2011-08-02 5 views
2

나는 온라인 방문자와 회원의 수를 얻기 위해 다음과 같은 코드를 가지고 :헤더가 이미 전송되었습니다 ... 왜 내 코드가 작동하지 않습니까?

session_save_path($_SERVER['DOCUMENT_ROOT'] . '/sessions/' . (isset($_COOKIE['uid']) ? "members/" : "guests/")); 
if(isset($_COOKIE['uid'])){ 
    session_id($_COOKIE['uid']); 
} 
session_start(); 
define("MAX_IDLE_TIME", 15); 
$online_guests = 0; 
$directory = opendir($_SERVER['DOCUMENT_ROOT'] . '/sessions/guests/'); 
while(false !== ($file = readdir($directory))){ 
    $online_guests++; 
} 
$online_guests -= 2; 
$online_members = array(); 
$directory = opendir($_SERVER['DOCUMENT_ROOT'] . '/sessions/members/'); 
while(false !== ($file = readdir($directory))){ 
    if($file != '.' && $file != '..'){ 
     $online_members[] = intval(substr($file,5)); 
    } 
} 

내 WAMP 서버에서 코드를 테스트를하고 일했다,하지만 난 내 호스트에 코드를 업로드 할 때 나에게 다음을 제공합니다 오류 :

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/csabi/public_html/index.php:9) in /home/csabi/public_html/track-online-users.php on line 6

답변

4

그 메시지는 당신이 session_start를 호출하기 전에 프로그램이 일부 출력을 가지고 의미합니다. 세션 쿠키 설정은 응답 본문 앞에 오는 HTTP 헤더에서 발생해야하기 때문에 브라우저에 아무것도 보낼 수 없습니다.

모두 index.phptrack-online-users.php 두 서버에 같은 경우에 대한 대안으로 등 파일의 시작에서 두 파일, 바이트 순서-부호로 개방 <?php,

+0

네, 맞습니다! 감사! index.php 파일에서 track-online-users는 페이지 제목 뒤에 만 포함되었습니다. – Csabi

+0

하지만 하나의 질문이 있습니다. 왜 동일한 스크립트가 내 컴퓨터에서 wamp 서버로 작동 했습니까? – Csabi

+0

@user : 사용자의 서버가 항상 출력 버퍼링을 사용하도록 구성되었을 수 있습니다. 구성을 확인하십시오. –

0

전에 빈 줄을 확인 공백을 제거하십시오 ... output buffering을 사용할 수 있습니다. 그러면 스크립트가 끝날 때까지 사용자에게 전송 된 모든 콘텐츠가 중지됩니다. 그러면 flush의 내용이 buffer의 내용이됩니다. output buffering을 시작하려면 파일 시작 부분에 공백, 텍스트, 또는 공백 문자 앞에 ...

공백을 제거하는 것은 바람직하지 않지만 항상 알아두면 유용합니다.

P .: 스크립트가 끝나기 전에 buffer의 내용을 플러시하려면 ob_flush(); 또는 ob_end_flush(); (버퍼링도 종료 됨)을 사용할 수 있습니다.

관련 문제