Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有服务器端预处理的PHP setcookie()?_Php_Cookies_Setcookie - Fatal编程技术网

具有服务器端预处理的PHP setcookie()?

具有服务器端预处理的PHP setcookie()?,php,cookies,setcookie,Php,Cookies,Setcookie,我有一个简单的页面日志代码。基本上,它会检查是否有VisitorID cookie,如果没有,它会查询我的数据库,获取下一个可用的数字,然后我想将其设置为VisitorID cookie。 问题是当我尝试运行它时,我得到“无法修改头信息-头已经由…bla..bla..bla..bla发送”。 在PHP中,如果我还不知道要将cookie设置为什么,如何设置cookie 以下是我在将任何内容写入浏览器之前在页面上包含的代码: <?php $Browser = $_SERVER["HTTP_U

我有一个简单的页面日志代码。基本上,它会检查是否有VisitorID cookie,如果没有,它会查询我的数据库,获取下一个可用的数字,然后我想将其设置为VisitorID cookie。 问题是当我尝试运行它时,我得到“无法修改头信息-头已经由…bla..bla..bla..bla发送”。 在PHP中,如果我还不知道要将cookie设置为什么,如何设置cookie

以下是我在将任何内容写入浏览器之前在页面上包含的代码:

<?php

$Browser = $_SERVER["HTTP_USER_AGENT"];
$TheTable = "PageVisits";

if (strripos($Browser,"mozilla") < 0||
strripos($Browser,"search") > 0 ||
strripos($Browser,"bot")  > 0  ||
strripos($Browser,"scoutjet")  > 0  ||
strripos($Browser,"ask jeeves/teoma") > 0  ||
strripos($Browser,"slurp")  > 0 )
{
$TheTable = "BotVisits";
}

$IPAddress = $_SERVER["REMOTE_ADDR"];
$AcceptedTypes = $_SERVER["HTTP_ACCEPT"];
$Referer = $_SERVER["HTTP_REFERER"];

$VisitorID = $_COOKIE["VisitorID"];
//Get VisitorID
if (strlen($VisitorID) == 0)
    {
    $SqlStr = "SELECT IF(IsNull(MAX(VisitorID)), 1, MAX(VisitorID) + 1) AS NewVistorID " .
    "FROM " . $TheTable . " ";

    $con = mysql_connect("DBServer","DBUserName","DBPassword");

    mysql_select_db("ratpackc_ratpack", $con);

    $result = mysql_query($SqlStr);
    $VisitorID = mysql_result($result, 0);
    mysql_close($con);
    }

//Update page log
$SqlStr = "INSERT INTO " . $TheTable . " " .
"(VisitorID, IPAddress, ThePage, Referer, Browser, AcceptedTypes) " .
"VALUES (" . $VisitorID . ",'" . $IPAddress . "','" . $ThisPage . "','" . $Referer . "','" . $Browser . "','" . $AcceptedTypes . "')" ;

$con = mysql_connect("DBServer","DBUserName","DBPassword");

mysql_select_db("ratpackc_ratpack", $con);
mysql_query($SqlStr);
mysql_close($con);

$CookieExpire = time()+31536000;
setcookie("VisitorID", $VisitorID, $CookieExpire);                    .

?>

您可以打开输出缓冲。这将阻止消息并允许代码运行

用于开始缓冲并将缓冲发送到输出


我在这里担心的是,您的代码不应该触发此错误-当您检查并设置此cookie时,您没有向页面输出任何内容,是吗?我不认为设置cookies会触发这样的错误。

除非有错误或以前的脚本发送输出,否则上述代码应该可以工作。此外,最好从文件末尾排除结束php标记?>以消除标记后出现空白的可能性。这不会影响您的PHP脚本


祝您好运

显然,在调用
setcookie()
函数之前会有一些输出。我想到了一些可能性:

  • 调用的php文件可能有一个UTF8 BOM头。文件开头有2个字节,声明文件为UTF8。这些字节通常不会显示在PHP编辑器中

  • 确保调用php文件的第一个字符是php块的开头
    不知道结束标记问题,谢谢。关于这个话题我发现了一个有趣的讨论。就个人而言,我会坚持使用结束标记,但我会注意后面的空格以及前面的空格。尾随空格也可以这样做。