2011-10-10 3 views
0

간단한 pagelog 코드가 있습니다. 기본적으로 VisitorID 쿠키가 있는지 확인하여 데이터베이스에 쿼리하지 않고 다음 사용 가능한 번호를 얻은 다음 VisitorID 쿠키로 설정하려고합니다. 문제는 실행하려고 할 때 "헤더 정보를 수정할 수 없습니다 - 이미 헤더가 ... bla .. bla .. bla"로 전송되었습니다. PHP에서 내가 설정하고 싶은 것이 무엇인지 모르면 어떻게 쿠키를 설정할 수 있습니까? 당신은 출력 버퍼링을 켤 수 있습니다pre-server side processing을 사용하는 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

는 분명히 몇 가지 출력이 있습니다. 내 마음에 오는 몇 가지 가능성이 있습니다 :

  1. 호출 PHP 파일에 UTF8 BOM 헤더가있을 수 있습니다. 이들은 파일의 시작 부분에서 2 바이트이며, 파일이 UTF8임을 선언합니다. 종종 이러한 바이트는 PHP 편집기에 표시되지 않습니다.
  2. 호출하는 PHP 파일의 첫 번째 문자가 PHP 블록 <?의 시작 부분인지 확인하십시오. 빈칸도 없어야합니다.
  3. 코드는 어딘가에 오류 메시지를 내 보냅니다. setcookie() 함수를 주석 처리하면이 오류 메시지를 볼 수 있어야합니다.

나는 당신이 보여준 코드가 아니라, 호출하는 PHP 파일에서 문제를 찾을 것이다.

0

:

여기에 아무것도가 브라우저에 기록되기 전에 내가 페이지에 포함하는 것이 내 코드입니다. 그러면 메시지가 표시되지 않고 코드가 실행됩니다.

버퍼링을 시작하려면 ob_start()을 사용하고 출력 버퍼를 보내려면 ob_flush()을 사용하십시오.

여기 내 관심사는이 코드가이 오류를 일으키지 않아야한다는 것입니다.이 쿠키를 확인하고 설정할 때 페이지에 아무 것도 출력하지 않습니다. 그렇습니까? 쿠키를 설정하면 이와 같은 오류가 발생한다는 인상을받지 못했습니다.

+0

나는 그것을 시도했지만 여전히 같은 오류가 발생합니다. – Soren

+0

그런 경우 일부 파일의 공백 문자가 문제 일 수 있습니다. 후행 공백은이를 수행 할 수 있습니다. –

1

위의 코드는 오류 또는 이전 스크립트에 의해 출력이 전송되지 않는 한 작동하지 않습니다. 또한, 닫는 PHP 태그?>를 파일의 끝에서 제외하여 태그 뒤에 공백이 생길 가능성을 없애는 것이 좋습니다. 이것은 PHP 스크립트에 영향을 미치지 않습니다. 당신이 setcookie() 함수를 호출하기 전에

행운

+1

닫기 태그 문제에 대해 알지 못했습니다. 감사합니다. 이 주제에 대한 흥미로운 토론은 [여기] (http://stackoverflow.com/questions/4410704/php-closing-tag)에서 찾을 수 있습니다. 개인적으로 나는 닫는 태그를 고수 할 것이지만, 나는 공백을 위해뿐만 아니라 후행 공백을주의 할 것이다. – martinstoeckli