web-dev-qa-db-fra.com

Exécution de WordPress sur la ligne de commande - Désactiver la sortie différée?

Je crée un travail cron qui s'exécute en dehors de WordPress. Du point de vue du développement, cela facilite vraiment le débogage et la création de scripts de nettoyage ou de tâches cron, en exécutant simplement une commande telle que 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 attendez à avoir un délai d'une seconde entre chaque sortie. Au lieu de cela, toutes les informations sont actuellement imprimées à la fin, d'un coup:

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

Après quelques tests, WP Super Cache et W3 Total Cache ne libèrent pas le tampon (ou l'empêchent de le libérer).

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

WP Super Cache :

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

Ceci devrait être ajouté après avoir inclus wp-load.php, ceci arrêtera toute mise en cache morte dans ses pistes et videra 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à; devrait fonctionner avec un simple 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 que le vidage 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 d'inclure wp-load.php, sinon vous aurez un tampon dans un tampon (tamponnement?) Et vous devrez vider deux fois ou plus.

10
soulseekah

Désactivez tous les plugins que vous pouvez avoir et qui mettent en cache 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 pages entières le font habituellement. En effet, ils essaient d'obtenir cette sortie et de l'enregistrer quelque part, pour une utilisation ultérieure dans la publication de la page. Ainsi, la sortie de la page est retardée jusqu'à la fin, où le plugin peut la mettre en cache.

4
Otto