Estoy creando un trabajo cron que se ejecuta fuera de WordPress. Desde una perspectiva de desarrollo, esto hace que sea muy fácil 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 ... generalmente cuando ejecuta archivos php como este, la salida se genera en su pantalla en tiempo real.
¿Alguien sabe cómo evitar que WP retrase toda la salida hasta el final del trabajo? Probablemente sea 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ía tener un retraso de 1 segundo entre cada salida, en cambio, actualmente obtengo 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";
fuente
Respuestas:
Después de algunas pruebas, tanto WP Super Cache como W3 Total Cache no liberan el búfer (o evitan que se libere el búfer).
Desactivar el "retraso de salida" es simple y depende del complemento de almacenamiento en caché involucrado.
WP Super Cache :
Esto debe agregarse después de incluir
wp-load.php
, esto detiene cualquier almacenamiento en caché en seco y vacía el búfer.W3 Caché total :
Igual que el anterior, llame después de incluir
wp-load.php
, de manera similar a lo que tiene allí; debería funcionar con solo el enjuague, W3 Total Cache inicia el búfer, sin embargo, no parece evitar su enjuague per se. A juzgar por la forma en que su salida todavía está en caché y el vaciado no funciona, diría que tiene WP Super Cache, que es más agresivo.Asegúrese de no iniciar un nuevo búfer antes de incluirlo
wp-load.php
, de lo contrario, tendrá un búfer dentro de un búfer (¿recepción de búfer?) Y tendrá que vaciar dos veces o más.fuente
wp_cache_disable()
es particular de WP Super Cache. Examinaré W3 Total Cache para ver cómo se puede deshabilitar de manera similar, utilizandoob_end_flush
trabajado para mí. ¿Cuáles son sus configuraciones y versión de W3 Total Cache?Deshabilite cualquier complemento que pueda tener que haga 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 páginas enteras generalmente sí. Esto se debe a que están tratando de obtener esa salida y guardarla en algún lugar, para su posterior uso en el servicio de la página. Por lo tanto, la salida de la página se retrasa hasta el final, donde el complemento puede almacenarla en caché.
fuente