PHP session_start函数和CLI

时间:2015-03-13 12:30:02

标签: php command-line-interface server

PHP CLI中使用的函数session_start打印下一个警告:session_start(): Cannot send session cookie - headers already sent by (output started at /home/robi/p/test.php:1) in /home/robi/p/test.php on line 2为什么?

我想记录变量中的所有客户端条目,并通过比较用户上次输入和当前输入时间来查看是否从特定远程地址伪造!我做错了吗?

这是我的代码:

<?php 
session_start();
//$entries = array();
//$client_address = $_SERVER["REMOTE_ADDR"] . ':' . $_SERVER["REMOTE_PORT"];
//$client_entry = time();
//array_push( $entries, $client_entry );
$client_entry = time();
$_SESSION["entries"][] =  $client_entry;
$entries = $_SESSION["entries"];


$check_out = array_filter(
    $entries,
    function($value) use($client_entry) {
        return ($value >= ($client_entry + (1 * 0.6)));
    }
);

2 个答案:

答案 0 :(得分:2)

错误来自第一行,因此您应尝试将文件转换为不带BOM的utf-8。

引用Wikipedia's article

  

字节顺序标记(BOM)是一个Unicode字符,用于表示文本文件或流的字节顺序(字节顺序)。

该字符将发送到输出流,因此您无法重新定义标题(session_start在标题中设置Cookie。)

答案 1 :(得分:2)

您的问题是,除了在CLI中使用会话没有意义之外,该输出已在session_start();之前开始。

正如我在您的代码中看到的,您的代码直接从session_start();开始,我相信您在<?php之前有一些字符。确保<?php位于文件的第一行(因此上面没有空行),并且前面没有任何内容(例如空格)。

这可以解决您遇到的这个问题。