Ejecutando WordPress en la línea de comandos - ¿Desactivar la salida demorada?

8

Estoy creando un trabajo cron que se ejecuta fuera de WordPress. Desde una perspectiva de desarrollo, esto hace que sea realmente fácil de depurar y crear scripts de limpieza o trabajos cron, simplemente ejecutando un comando como el siguiente en la línea de comandos:

php myfile.php

Mi problema es que WordPress retrasa de alguna manera toda la salida ... normalmente cuando ejecutas archivos php como este, la salida se genera en tu pantalla en tiempo real.

¿Alguien sabe cómo evitar que WP retrase toda la salida hasta el final del trabajo? Probablemente es un parámetro simple que me falta al ejecutar el archivo PHP, o una constante de algún tipo, pero no estoy seguro.

En el siguiente código, esperarías tener un retraso de 1 segundo entre cada salida, en cambio, actualmente tengo toda la información impresa al final, de una vez:

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";
    
pregunta Alex Cook 16.01.2012 - 20:33

2 respuestas

10

Después de algunas pruebas, tanto WP Super Cache como W3 Total Cache no liberan el búfer (o evitan que el búfer se libere).

Desactivar el "retraso de salida" es simple y depende del complemento de almacenamiento en caché involucrado.

WP Super Cache :

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

Esto debe agregarse después de incluir wp-load.php , esto detiene el almacenamiento en caché en sus pistas y vacía el búfer.

W3 Total Cache :

ob_end_clean(); // or ob_end_flush();

Igual que el anterior, llama después de incluir wp-load.php , de manera similar a lo que tienes allí; debería funcionar solo con el lavado, W3 Total Cache inicia el búfer, sin embargo, no parece impedir el lavado por sí mismo. A juzgar por la forma en que tu salida aún está en caché y el vaciado no funciona, diría que tienes WP Super Cache, que es más agresivo.

Asegúrese de no iniciar un nuevo búfer antes de incluir wp-load.php , de lo contrario, tendrá un búfer dentro de un búfer (bufferception?), y tendrá que vaciar dos veces o más.

    
respondido por el soulseekah 08.03.2012 - 14:33
4

Desactive los complementos que pueda tener que hagan el almacenamiento en caché de toda la página. WP-Super-Cache, W3 Total Cache, etc.

WordPress no "retrasa la salida". Pero los complementos de almacenamiento en caché de toda la página suelen hacerlo. Esto se debe a que están tratando de obtener esa salida y guardarla en algún lugar, para su uso posterior en la publicación de la página. Por lo tanto, el resultado de la página se retrasa hasta el final, donde el complemento puede guardarlo en la memoria caché.

    
respondido por el Otto 07.03.2012 - 16:01

Lea otras preguntas en las etiquetas