ob_start()可以影响包含和必需的文件吗?

时间:2011-01-31 13:12:14

标签: php cron

我有一些php文件“A”,它由cron从控制台调用(“php -q”命令)。那个php文件需要php文件“B”。文件“B”在项目的许多地方使用,并以if(!isset($_SESSION)) session_start();开头它在浏览器中工作正常,但是当由cron使用时,文件“A”需要文件“B”,文件“B”尝试启动会话,我得到“会话标题发送”通知。我试图在{A}之前ob_start()(当然还有require_once("B"))之前在文件“A”中投放ob_clean(),但错误仍然存​​在!

我做错了什么?我如何(从文件“A”)阻止文件“B”尝试向控制台发送任何内容?

4 个答案:

答案 0 :(得分:2)

通过ini_set()或php.ini配置在CLI php脚本中禁用session.use_cookies。这种方式session_start()不会尝试发送Cookie。您必须检查会话的缓存设置以及session_start()发送有关缓存的HTTP标头。

ini_set('session.use_cookies', 0); // disable using cookies for session ID (cookies = headers)
session_cache_limiter(false);      // disable sending cache headers
// ...
session_start();

答案 1 :(得分:0)

$ _ SESSION主要基于cookie,因此无法在CLI中使用

答案 2 :(得分:0)

必须在任何输出之前调用ob_start()。所以,在文件“A”的顶部,也许。

另外,我认为$ _SESSION是一个超全局并且总是设置,所以if(!isset($ _ SESSION))可能什么都不做(永远不会)。

答案 3 :(得分:0)

你可以做$ _SESSION = true;在文件“A”中,它将使var设置,并且它不会启动会话。它很脏,但确实有效。