Rodando Processos em Background com PHP
Quando precisamos executar processamentos demorados com PHP, fazer com que o usuário dispare estes eventos através de uma página web pode não ser uma boa idéia, pois a conexão pode acabar em time-out e, além do usuário nunca ter certeza se o processo terminou ou não, o servidor web ainda pode bloquear o acesso daquele cliente por algum tempo.
Este era o problema que estávamos enfrentando em um sistema e procurávamos uma solução.
A primeira idéia foi a de usar a biblioteca de Funções de Controle de Processos do próprio PHP, porém, o manual informa que abrir uma nova thread rodando a aplicação em um servidor web pode causar comportamentos inesperados. Como também não temos controle das configurações do Apache, descartamos essa idéia a princípio.
Outra idéia foi utilizar a função exec() para executar o script, mas ainda tínhamos um problema, pois o PHP aguarda o retorno desta função para continuar o processamento. Este problema pode ser contornado utilizando uma solução do próprio Linux. Basta utilizar o caracter & (e-comercial) ao final da linha de comando dentro da função shell para que ele seja executado em uma nova thread.
Assim, o PHP recebe o retorno do exec() e finaliza a execução, enquanto o processo de geração do relatório segue em background sem interferir na requisição do usuário.
If you're new here, you may want to subscribe to my RSS feed. Thanks for visiting!
Related Posts
Fatal error: Call to undefined function similar_posts() in /home/owshit/public_html/newtonwagner/wordpress/wp-content/themes/cms2/single.php on line 74