【发布时间】:2018-06-14 20:51:43
【问题描述】:
在普通的 php 脚本中,您可以这样做:
print "run in 3\n"
sleep(1);
print "run in 2\n";
sleep(1)
等等…… 你得到输出并等待一秒钟,你得到下一个输出。
所以现在我在 cli 上运行带有 slimframework 的脚本:
$env = \Slim\Http\Environment::mock([
'REQUEST_METHOD' => 'GET',
'HTTPS' => true,
'SERVER_NAME' => 'www.domain.tld',
'REQUEST_URI' => '/cli_action'
]);
$settings['environment'] = $env;
...
$app->run();
它工作正常并完成工作(发送电子邮件)。 但是我第一次在 cli 上得到输出是脚本结束的时候。 是否有一个优雅的解决方案可以在运行时获取输出(日志消息)?
感谢您的帮助。
托马斯
【问题讨论】:
-
我认为 Slim 默认使用输出缓冲。当实例化一个新的
\Slim\App对象时,您将一个$settings变量传递给构造函数。尝试设置$settings ['outputBuffering'] = false;看看是否有任何变化。 -
Slim 似乎总是调用
ob_start而不管outputBuffering设置。最简单的方法是首先在您的控制器中调用ob_end_clean();。这样输出缓冲就关闭了,每个回显都是无缓冲写入的。
标签: php command-line-interface slim