Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal.
Eu tenho um script que gera um relatorio, mas é pesado e demora a executar.
Então fiz o seguinte, no inicio do código coloquei:
set_time_limit(7200);
ignore_user_abort(true);
Ou seja, 2 horas para executar e mesmo que o utilizador feche o browser, continua a processar.
O script é executado via AJAX e vai gravando em uma tabela a porcentagem de execução.
Acontece que se tentar clicar em um outro botão no site não dá, trava por completo até o script ser finalizado, mas se fechar o browser e voltar a abrir o site já consigo navegar normalmente e ainda consigo fazer uma consulta a base de dados e visualizar porcentagem em que o relatório vai.
Porque tenho que fechar o browser? Como faço para obter o mesmo resultado sem ter que fechar o browser?
Obrigado.
>
Execute em command line
Ao invés de executar em HTTP, crie um agendamento CRON definido para executar logo em seguida, após 1 ou 5 segundos.
Com isso, nenhum brwoser ficará "preso" a espera do término da execução, pois não há vínculos com sessões.
Opa, obrigado pela ajuda.
É possível criar um cron via script?
Seria através do exec?
Procurei no google e só encontro referência a exec, mas nada relacionado a cron job.
Obrigado.
A função exec() executa funções shell..
Basta inserir o comando.
Creio que esteja usando servidor linux, por isso pergunto,
Entende algo de linux ?
Olá Filipe,
Apenas para fins de similaridade, o cron job é o "agendador de tarefas" do windows.
Sua hospedagem utiliza o painel "Cpanel"?
Caso sim, podes utilizar a opção "Tarefas Cron", do grupo "Avançada", dentro do Cpanel.
Depois basta preencher o formulário informando a periodicidade, e qual script que gera o relatório :)
O caminho do script/comando ficaria, por exemplo, assim: "php /home/USUARIO/www/seu_script.php"
Abraço.
#5
Muito confuso o modo como descreveu.
"Apenas para fins de similaridade, o cron job é o "agendador de tarefas" do windows."
Eu entendi a colocação mas para quem não entende fica mais confuso..
O cron job é para ambientes Linux.
O equivalente em ambiente Windows é o Schtask.
E mais, ele precisa disparar dinamicamente via PHP.
Não será algo pre-determinado.
#3 veja: Criando agendamento CRON com o PHP
hinom, legal, obrigado pela dica :D
Neste caso, por ser gerado dinamicamente, minha sugestão é através da criação de uma fila para geração dos relatórios, assim como funcionam diversos sistemas (como por exemplo sistemas de e-mail marketing).
Em resumo, cada solicitação de novo relatório, geraria uma lista em uma tabela auxiliar com os parâmetros, e a cada relatório emitido, o usuário é alertado.
Porém, desta forma aumenta-se a complexidade do desenvolvimento, e precisaria mais detalhes do projeto para poder auxiliar.
>
A função exec() executa funções shell..
Basta inserir o comando.
Creio que esteja usando servidor linux, por isso pergunto,
Entende algo de linux ?
Sim entendo linux.
Rangel Leithold, eu entendo o que é cron job e como configura-lo no cpanel, mas a questão não era essa, era mesmo gerar um agendamento via php.
O link que o hinom postou responde a questão: http://forum.imasters.com.br/topic/512730-criando-agendamento-cron-com-o-php/
O único problema é que estou a rodar WAMP, ainda não passei o projecto para o servidor final, que é linux :)
Obrigado pela ajuda pessoal.
Execute em command line
Ao invés de executar em HTTP, crie um agendamento CRON definido para executar logo em seguida, após 1 ou 5 segundos.
Com isso, nenhum brwoser ficará "preso" a espera do término da execução, pois não há vínculos com sessões.