Exécuter WordPress sur la ligne de commande - Désactiver la sortie retardée?

8

Je crée un travail cron qui s'exécute en dehors de WordPress. Du point de vue du développement, cela facilite le débogage et la création de scripts de nettoyage ou de tâches cron, en exécutant simplement une commande comme celle-ci sur la ligne de commande:

php myfile.php

Mon problème est que WordPress retarde en quelque sorte toutes les sorties ... généralement lorsque vous exécutez des fichiers php comme celui-ci, la sortie est générée sur votre écran en temps réel.

Est-ce que quelqu'un sait comment empêcher WP de retarder toutes les sorties jusqu'à la fin du travail? C'est probablement un paramètre simple qui me manque lors de l'exécution du fichier PHP, ou une constante quelconque, mais je ne suis pas sûr.

Dans le code suivant, vous vous attendriez à avoir un délai d'une seconde entre chaque sortie, à la place, j'obtiens actuellement toutes les informations imprimées à la fin, à la fois:

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";
Alex Cook
la source
Je crois que cela a à voir avec les paramètres du serveur et non avec wordpress lui-même. Testé votre code et il fonctionne comme prévu sur mon serveur lors de l'exécution à partir de la ligne de commande. Avez-vous des plugins qui cachent peut-être?
Kokarn
@Kokarn vous avez raison. J'aurais dû tester cela dans une autre installation WP. On dirait que c'est parce que j'utilise W3 Total Cache. Publiera la solution éventuelle ici (au lieu de simplement désactiver le plugin).
Alex Cook

Réponses:

10

Après quelques tests, WP Super Cache et W3 Total Cache ne libèrent pas le tampon (ni empêchent le tampon d'être libéré).

La désactivation du "délai de sortie" est simple et dépend du plugin de mise en cache impliqué.

WP Super Cache :

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

Cela devrait être ajouté après l'inclusion wp-load.php, cela arrête toute mise en cache morte dans ses pistes et vide le tampon.

Cache total W3 :

ob_end_clean(); // or ob_end_flush();

Comme ci-dessus, appelez après avoir inclus wp-load.php, de la même manière que ce que vous avez là-bas; devrait fonctionner avec simplement le vidage, W3 Total Cache démarre le tampon, mais il ne semble pas empêcher son vidage en soi. À en juger par la façon dont votre sortie est toujours mise en cache et le rinçage ne fonctionne pas, je dirais que vous avez WP Super Cache, qui est plus agressif.

Assurez-vous de ne pas démarrer un nouveau tampon avant de l'inclure wp-load.php, sinon vous aurez un tampon dans un tampon (bufferception?), Et devrez vider deux fois ou plus.

soulseekah
la source
Merci - cette réponse est particulièrement utile avec l'exemple de code. Je n'ai pas encore eu le temps de tester mais je vais vérifier tout de suite.
Alex Cook,
J'utilise W3 Total Cache. On dirait que "wp_cache_disable" n'est pas une fonction valide - est-ce spécifique à Super Cache?
Alex Cook
Oui, wp_cache_disable()c'est particulier à WP Super Cache. Je vais regarder dans W3 Total Cache pour voir comment il peut être désactivé de manière similaire, en utilisant ob_end_flushtravaillé pour moi. Quels sont vos paramètres et version de W3 Total Cache?
soulseekah
J'ai édité ma réponse.
soulseekah
Assurez-vous de ne pas démarrer un nouveau tampon avant d'inclure wp-load.php, sinon vous aurez un tampon dans un tampon.
soulseekah
4

Désactivez tous les plugins que vous pourriez avoir qui font la mise en cache de la page entière. WP-Super-Cache, W3 Total Cache, etc.

WordPress ne "retarde pas la sortie". Mais les plugins de mise en cache de page entière le font généralement. C'est parce qu'ils essaient d'obtenir cette sortie et de l'enregistrer quelque part, pour une utilisation ultérieure dans la diffusion de la page. Ainsi, la sortie de la page est retardée jusqu'à la fin, où le plugin peut la mettre en cache.

Otto
la source
Ahhh, bonne prise. J'aurais dû y penser! Je vais tester et vous contacter. Merci.
Alex Cook