为什么当php忙时echo不显示任何内容

时间:2010-04-07 15:24:03

标签: php

当PHP忙于处理某些事情时(例如在使用curl或其他类似的东西上网时),PHP回显或打印功能不会显示任何内容。

后来我发现php在命令行执行你的php时会显示输出:

php myscript.php

但是现在我也没有从命令行获得任何输出! 有什么样的技巧或设置应该让php显示输出吗?

2 个答案:

答案 0 :(得分:6)

很可能,它正在缓存结果(在PHP和Web服务器中),而不是实际将它们发送到浏览器。我能给出的最好的建议是我的代码中的这个块:

/**
 * Act as a "breakpoint" in the code, forcing everything to be flushed to the browser
 */
function breakpoint() {
    global $debug;
    if ($debug) { // So that it doesn't slow down extracts
        ob_flush();
        flush();
        sleep(.1);
    }
}

如果我们在调试模式下运行页面,那么$debug就是我们网站特有的。

您需要的两件事是ob_flush(),它将PHP的缓冲区发送到Web服务器的缓冲区,而flush()将导致服务器转储到浏览器。 (注意:如果浏览器在显示任何内容之前进行缓存,则无法阻止此操作)sleep可以帮助确保它不会过载,并且有可能正确刷新。

请参阅: http://ca.php.net/manual/en/function.ob-flush.phphttp://ca.php.net/manual/en/function.flush.php

答案 1 :(得分:3)

PHP和您的Web服务器都可能缓存echo和print的输出。在脚本完成之前,这通常会导致无输出。

尝试查看flush()以强制输出PHP,但它仍然可能会在Web服务器上被阻止,所以可能没有帮助......