Php ob_start()能否影响包含的和必需的文件?

Php ob_start()能否影响包含的和必需的文件?,php,cron,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”)(当然还有ob_clean())之前,但错误依然存在 我做错了什

我有一些php文件“A”,它由cron从控制台调用(“php-q”命令)。该php文件需要php文件“B”。文件“B”在项目中的许多地方都使用,并且以
if(!isset($_SESSION))SESSION_start()开头它可以在浏览器中正常工作,但当cron使用时,文件“A”需要文件“B”,文件“B”尝试启动会话,我收到了“会话头已发送”通知。我试图在文件“A”中包含
ob_start()
,就在
require_once(“B”)
(当然还有
ob_clean()
)之前,但错误依然存在


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

$\u会话主要基于cookie,因此无法在CLI中工作,必须在任何输出之前调用ob\u start()。所以,在文件“A”的顶部,也许

另外,我认为$\u会话是一个超全局会话,并且总是被设置的,因此if(!isset($\u会话))可能不会执行任何操作(从不为true)。

通过
ini\u set()
或通过php.ini配置在CLI php脚本中禁用。这样
session\u start()
就不会尝试发送cookie。您必须检查会话的缓存设置以及
session\u 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();

您可以执行$\u SESSION=true;在文件“A”中,该文件将设置var,并且不会启动会话。它很脏,但确实有效。

您不能在命令行上使用会话,这没有任何意义,因为没有浏览器可以向其发送cookie,只有一个请求。为什么您认为发送了任何内容?发送任何东西到控制台有什么不对?@Dan-我知道,这就是本文的重点:)@Col。因为当文件“B”试图打开会话时,错误会写在“error\u log”中,我知道!我只是不想使用为浏览器使用而创建的标准php文件(B),而是想以某种方式阻止它(通过文件A)尝试打开会话!这就是为什么我将“ob_start”放在“require_once(B)”之前,并将“ob_clean”放在“require_once”之后,如果我理解您可以这样做的话:在文件中声明一个通用变量,比如:$sessionCheck=1;现在在文件B中,do if(!isset($\u SESSION,$sessionCheck))
$\u SESSION
仅在加载/启动会话时存在,并不总是存在。谢谢您的建议,但是我可以从php禁用“使用cookies”吗?仅当调用文件“A”时?我无法在我的站点服务器上访问php.ini:\@guest86:是的,正如我所说:“…通过ini\u set()或通过…”。很好!那么,我是否应该在“require\u once”之前关闭“ini\u set”并将其重新打开?或者服务器稍后会将其还原为默认值?@guest86:对于当前请求/脚本(并且仅限于此执行),其已禁用。这不会影响php.ini配置或web服务器行为。您不需要将其设置回“开”。谢谢您的努力!我会接受这个答案,即使它可能不是最快的:)这听起来很简单!有人认为这种方法有问题吗?