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


8

我正在创建在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";

我相信这与服务器上的设置有关,而与wordpress本身无关。测试了您的代码,当从命令行运行时,它可以在我的服务器上按预期工作。您是否有可能缓存的插件?
Kokarn 2012年

@Kokarn你是正确的。我应该在另一个WP安装中对此进行测试。看起来是因为我正在使用W3 Total Cache。将最终的解决方案发布回此处(而不是仅停用插件)。
亚历克斯·库克

Answers:


10

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

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

WP超级缓存

wp_cache_disable();
ob_end_flush(); // or ob_end_clean();

应该在include之后添加它wp-load.php,这将停止其轨道中的所有缓存失效并刷新缓冲区。

W3总缓存

ob_end_clean(); // or ob_end_flush();

与上述相同,在包含之后进行呼叫wp-load.php,类似于您所拥有的;W3 Total Cache确实应该仅与刷新一起工作,但是它不会阻止其本身的刷新。从您的输出仍被缓存和刷新不起作用的方式来判断,我想说您有WP Super Cache,它更具攻击性。

确保在包含之前不要启动新的缓冲区wp-load.php,否则将在缓冲区中有一个缓冲区(bufferception?),并且必须刷新两次或更多次。


谢谢-这个答案对于代码示例特别有帮助。还没来得及测试,现在就去检查。
亚历克斯·库克

我正在使用W3 Total Cache。看起来“ wp_cache_disable”不是有效的函数-特定于超级缓存吗?
亚历克斯·库克

是的,wp_cache_disable()特定于WP Super Cache。我将研究W3 Total Cache,以了解如何通过ob_end_flush对我有用的方法禁用它。您的W3总缓存设置和版本是什么?
soulseekah 2012年

我已经编辑了答案。
soulseekah 2012年

确保在包含wp-load.php之前不要启动新的缓冲区,否则缓冲区中将有一个缓冲区。
soulseekah 2012年

4

禁用可能具有整页缓存功能的所有插件。WP-超级缓存,W3总缓存等

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


啊,很好。应该想到了!我会进行测试并与您联系。谢谢。
亚历克斯·库克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.