我有一些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”尝试向控制台发送任何内容?
答案 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设置,并且它不会启动会话。它很脏,但确实有效。