Executando o WordPress na linha de comando - Desativar saída atrasada?

8

Estou criando um cron job que é executado fora do WordPress. A partir de uma perspectiva de desenvolvimento, isso torna realmente fácil depurar e criar scripts de limpeza ou tarefas cron, apenas executando um comando como o seguinte na linha de comando:

php myfile.php

Meu problema é que o WordPress de alguma forma atrasa todas as saídas ... tipicamente quando você executa arquivos php como esse, a saída é gerada na sua tela em tempo real.

Alguém sabe como evitar que o WP atrase toda a saída até o final do trabalho? É provavelmente algum parâmetro simples que estou perdendo ao executar o arquivo PHP, ou uma constante de algum tipo, mas não tenho certeza.

No código a seguir, você esperaria ter um atraso de 1 segundo entre cada saída; no momento, recebo todas as informações impressas no final, de uma só 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";
    
por Alex Cook 16.01.2012 / 20:33

2 respostas

10

Após alguns testes, tanto o WP Super Cache quanto o W3 Total Cache não liberam o buffer (ou impedem que o buffer seja liberado).

Desativar o "atraso de saída" é simples e depende do plug-in de armazenamento em cache envolvido.

WP Super Cache :

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

Isso deve ser adicionado depois de incluir wp-load.php , isso interrompe qualquer cache em suas trilhas e libera o buffer.

W3 Total Cache :

ob_end_clean(); // or ob_end_flush();

O mesmo que acima, ligue depois de incluir wp-load.php , da mesma forma que você tem lá; deve funcionar com apenas flushing, W3 Total Cache faz buffer de início, no entanto, não parece impedir a sua descarga em si. A julgar pela maneira como sua saída ainda é armazenada em cache e o flushing não funciona, eu diria que você tem o WP Super Cache, que é mais agressivo.

Certifique-se de não iniciar um novo buffer antes de incluir wp-load.php , caso contrário você terá um buffer dentro de um buffer (bufferception?) e terá que liberar duas vezes ou mais.

    
por soulseekah 08.03.2012 / 14:33
4

Desabilite todos os plugins que você possa ter que fazem cache de página inteira. WP-Super-Cache, Cache Total W3, etc.

O WordPress não "atrasa a saída". Mas plugins de cache de página inteira geralmente fazem. Isso ocorre porque eles estão tentando obter essa saída e salvá-la em algum lugar, para uso posterior na veiculação da página. Assim, a saída da página é atrasada até o final, onde o plugin pode armazená-la em cache.

    
por Otto 07.03.2012 / 16:01