it-swarm.com.de

Ausführen von WordPress in der Befehlszeile - Verzögerte Ausgabe deaktivieren?

Ich erstelle einen Cron-Job, der außerhalb von WordPress ausgeführt wird. Aus Sicht der Entwicklung ist das Debuggen und Erstellen von Bereinigungsskripten oder Cron-Jobs sehr einfach, wenn Sie in der Befehlszeile einen Befehl wie den folgenden ausführen:

php myfile.php

Mein Problem ist, dass WordPress die gesamte Ausgabe irgendwie verzögert. Wenn Sie PHP-Dateien wie diese ausführen, wird die Ausgabe normalerweise in Echtzeit auf Ihrem Bildschirm generiert.

Weiß jemand, wie man verhindert, dass WP die gesamte Ausgabe bis zum Ende des Jobs verzögert? Es ist wahrscheinlich ein einfacher Parameter, den ich beim Ausführen der PHP -Datei oder einer Konstante vermisse, aber ich bin mir nicht sicher.

Im folgenden Code wird eine Verzögerung von 1 Sekunde zwischen den einzelnen Ausgaben erwartet. Stattdessen werden derzeit alle Informationen auf einmal am Ende gedruckt:

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

Nach einigen Tests geben sowohl WP Super Cache als auch W3 Total Cache den Puffer nicht frei (oder verhindern, dass der Puffer freigegeben wird).

Das Ausschalten der "Ausgangsverzögerung" ist einfach und hängt vom beteiligten Caching-Plugin ab.

WP Super Cache :

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

Dies sollte nach dem Einfügen von wp-load.php hinzugefügt werden. Dies stoppt jegliches Caching in seinen Spuren und leert den Puffer.

W3 Gesamtcache :

ob_end_clean(); // or ob_end_flush();

Rufe wie oben auf, nachdem du wp-load.php eingegeben hast, ähnlich wie du es dort hast. Sollte nur mit dem Leeren gearbeitet werden, startet W3 Total Cache den Puffer, scheint jedoch das Leeren per se nicht zu verhindern. Gemessen an der Art und Weise, wie Ihre Ausgabe immer noch zwischengespeichert ist und das Leeren nicht funktioniert, würde ich sagen, dass Sie WP Super-Cache haben, was aggressiver ist.

Stellen Sie sicher, dass Sie keinen neuen Puffer starten, bevor Sie wp-load.php einfügen. Andernfalls befindet sich ein Puffer in einem Puffer (bufferception?), Und Sie müssen mindestens zweimal leeren.

10
soulseekah

Deaktivieren Sie alle Plugins, die möglicherweise das Caching für ganze Seiten durchführen. WP-Super-Cache, W3-Gesamt-Cache usw.

WordPress "verzögert" die Ausgabe nicht. Aber Plugins für das Caching ganzer Seiten tun dies normalerweise. Dies liegt daran, dass sie versuchen, diese Ausgabe abzurufen und sie irgendwo zu speichern, um sie später für die Bereitstellung der Seite zu verwenden. Somit wird die Seitenausgabe bis zum Ende verzögert, wo das Plugin sie zwischenspeichern kann.

4
Otto