web-dev-qa-db-ja.com

コマンドラインでWordPressを実行する - 遅延出力をオフにする

私は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";
8
Alex Cook

確かにいくつかのテストの後、WP Super CacheとW3 Total Cacheの両方がバッファを解放しません(またはバッファが解放されないようにします)。

「出力遅延」をオフにするのは簡単で、関係するキャッシングプラグインに依存します。

WPスーパーキャッシュ

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

これはwp-load.phpをインクルードした後に追加する必要があります。これはそのトラックでキャッシュがいっぱいになって停止し、バッファをフラッシュします。

W3トータルキャッシュ

ob_end_clean(); // or ob_end_flush();

上記と同じように、wp-load.phpをインクルードしてから呼び出します。単にフラッシュするだけで動作するはずですが、W3 Total Cacheはバッファを開始しますが、フラッシュ自体を防ぐようには見えません。出力がまだキャッシュされていてフラッシュが機能しない方法で判断すると、WP Super Cacheがあるとします。

wp-load.phpをインクルードする前に、新しいバッファを開始しないようにしてください。そうしないと、バッファ内にバッファがあり(bufferception?)、2回以上フラッシュする必要があります。

10
soulseekah

全ページキャッシュを行うプラグインを無効にします。 WPスーパーキャッシュ、W3トータルキャッシュなど.

WordPressは「出力を遅らせる」ことはしません。しかし、全ページキャッシングプラグインは通常そうします。これは、後でページを提供する際に使用するために、出力を取得してどこかに保存しようとしているためです。したがって、ページ出力は、プラグインがそれをキャッシュできる最後まで遅延されます。

4
Otto