在命令行上运行WordPress-关闭延迟输出?

时间:2012-01-16 作者:Alex Cook

我正在创建一个在WordPress之外运行的cron作业。从开发角度来看,这使得调试和创建清理脚本或cron作业非常容易,只需在命令行上运行以下命令即可:

php myfile.php
我的问题是WordPress以某种方式延迟了所有输出。。。通常,当您运行这样的php文件时,会在屏幕上实时生成输出。

是否有人知道如何防止WP将所有输出延迟到作业结束?这可能是我在运行PHP文件时丢失的一些简单参数,或者某种常量,但我不确定。

在下面的代码中,您希望在每个输出之间有1秒的延迟,相反,我当前会在最后一次打印所有信息:

set_time_limit( 0 );
ini_set( "memory_limit", "64M" );

ob_start();
require_once( dirname( __FILE__ ) . \'/wp-load.php\' ); // you need to adjust this to your path
ob_end_clean();

global $wpdb;
$q = $wpdb->prepare ("SELECT * FROM wp_posts LIMIT 5");
$results = $wpdb->get_results ($q);
echo "found " . count ($results) . "\\n";

foreach ($results as $post)
{
    echo $post->post_title . "\\n";
    sleep(1);
}

echo "\\n\\ndone";

2 个回复
最合适的回答,由SO网友:soulseekah 整理而成

确实,经过一些测试后,WP Super Cache和W3 Total Cache都不会释放缓冲区(或阻止释放缓冲区)。

关闭“输出延迟”很简单,这取决于所涉及的缓存插件。

WP Super Cache:

wp_cache_disable();
ob_end_flush(); // or ob_end_clean();
这应在包括之后添加wp-load.php, 这会阻止任何缓存死机并刷新缓冲区。

W3 Total Cache:

ob_end_clean(); // or ob_end_flush();
同上,包括后调用wp-load.php, 与你那里的情况类似;W3 Total Cache应该只用于刷新,它确实会启动缓冲区,但它本身似乎并不阻止刷新。从您的输出仍然被缓存并且刷新不起作用的方式来看,我认为您有WP超级缓存,这更具攻击性。

确保在包括之前不启动新缓冲区wp-load.php, 否则,缓冲区中会有一个缓冲区(BufferException?),必须冲洗两次或更多。

SO网友:Otto

禁用您可能拥有的所有执行整个页面缓存的插件。WP Super Cache、W3 Total Cache等。

WordPress不“延迟输出”。但整页缓存插件通常会这样做。这是因为他们正试图获取该输出并将其保存在某个地方,以便以后在服务页面时使用。因此,页面输出被延迟到最后,插件可以在那里缓存它。

结束