我有以下代码来获取在线访问者和成员的数量:
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服务器中的代码并且它有效,但是当我将代码上传到我的主机时,它给了我以下错误:
警告:session_start()[function.session-start]:无法发送会话cookie - 已经在/ home / csabi / public_html /中发送的输出(/home/csabi/public_html/index.php:9中的输出开始)第6行的track-online-users.php
答案 0 :(得分:4)
该消息表示您的程序在调用session_start
之前有一些输出。在此之前,您无法向浏览器发送任何内容,因为设置会话cookie必须在响应正文之前的HTTP标头中进行。
如果两个服务器上的index.php
和track-online-users.php
都相同,请检查两个文件中打开<?php
之前的空行,文件开头的字节顺序标记等等。
答案 1 :(得分:0)
作为删除任何空格的替代方法,...您可以使用output buffering
。这将停止发送给用户的任何内容,直到它到达脚本的末尾。然后,flush
将buffer
的内容发送给用户。要开始output buffering
,只需在文件开头写ob_start();
,然后在任何空格,文字,...
并不是删除任何空格是错误的,但知道它总是有用的。
PS:要在脚本结束前刷新buffer
的内容,您可以使用ob_flush();
或ob_end_flush();
(这也将结束缓冲)。