【问题标题】:SlimFramework 3 input and output to cli while runningSlimFramework 3 在运行时输入和输出到 cli
【发布时间】: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


【解决方案1】:

Slim 默认使用输出缓冲。实例化新的 \Slim\App 对象时,通过将 outputBuffering 设置为 false 来禁用输出缓冲:

$settings ['outputBuffering'] = false;
$app = new \Slim\App($settings);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-25
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多