2011-10-10 38 views
0

我有一個簡單的pagelog代碼。基本上,它會檢查是否有VisitorID cookie,如果沒有,它會查詢我的數據庫,獲取下一個可用的數字,然後我想將其設置爲VisitorID cookie。 問題是當我嘗試運行它時,我得到了「無法修改標題信息 - 標題已被... bla .. bla .. bla」發送。 在PHP中,如果我不知道我想將其設置爲什麼,我該如何設置cookie?PHP的setcookie()與前置服務器端處理?

這裏是我的代碼,我包括在頁面上任何事情之前被寫入到瀏覽器:

<?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);     . 

?> 

回答

0

顯然有一些輸出調用setcookie()函數之前。有一些可能性出現在我的腦海裏:

  1. 調用php文件可能有一個UTF8 BOM頭。這些是在文件開頭的2個字節,聲明該文件是UTF8。通常這些字節不會在PHP編輯器中顯示。
  2. 確保調用php文件的第一個字符是一個php塊<?的開頭,應該不會有空格。
  3. 您的代碼在某處發出錯誤消息。你可以通過註釋掉setcookie()函數來檢查,你應該能夠看到這個錯誤信息。

我會尋找調用php文件中的問題,而不是你已經顯示的代碼。

0

您可以打開輸出緩衝。這將阻止郵件並允許您的代碼運行。

使用ob_start()開始緩衝,並且ob_flush()發送緩衝區輸出。

我在這裏擔心的是,你的代碼不應該觸發這個錯誤 - 當你檢查並設置這個cookie時,你不會輸出任何東西到頁面,是嗎?我不是覺得設置cookie會引發這樣的錯誤。

+0

我試過了,仍然得到相同的錯誤。 – Soren

+0

如果是這種情況,某些文件中的空白字符可能會成爲問題。尾隨空白也可以。 –

1

上面的代碼應該工作,除非有錯誤或以前的腳本發送輸出。此外,最好從文件末尾排除關閉php標記?>以消除標記後出現空白的可能性。這不會影響你的PHP腳本。

好運

+1

不知道關閉標籤的問題,謝謝。關於這個話題的一個有趣的討論,我發現[這裏](http://stackoverflow.com/questions/4410704/php-closing-tag)。我個人會堅持結束標籤,但我會留意尾隨空白以及空白。 – martinstoeckli