Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

bioshock

Correr processos no "background" [Resolvido]

Mensagens Recomendadas

bioshock

Boas, estive a ler este artigo http://www.developertutorials.com/blog/php/running-background-processes-in-php-349/ e fiquei com algumas dúvidas. Eu pretendo implementar um envio de emails no "background". Ou seja, a pessoa quando clicar em enviar, ele vai enviar em massa X emails, mas a pessoa não precisa de estar na página de envio de emails à espera, ou seja, o script tem de estar a ser executado no "background".

Em relação ao artigo, é a melhor maneira de implementar? Ainda não testei, mas eu utilizo um delay de 0.5 segundos para não crashar em envio de newsletters. Era também porreiro, caso alguém soubesse como implementar, a cada email enviado com sucesso, no fim, mostrar quais os emails que foram enviados com sucesso, uma espécie de "Status".

Obrigado!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado
Em relação ao artigo, é a melhor maneira de implementar? Ainda não testei, mas eu utilizo um delay de 0.5 segundos para não crashar em envio de newsletters.

Não é das melhores maneiras... Para esses efeitos tens o Process Controlo do PHP. Mas duma maneira ou de outra, tens de verificar se o servidor de produção suporta; e, normalmente, os servidores partilhados não te dão direitos de correr exec's nem de usar a extensão process control.

O que se usa normalmente em mass mailings é ter horas definidas para o envio via cronjobs. Só tens que guardar na BD os dados relativos ao envio e executar um script à hora do cronjob que consulte a BD e envie os mails que estão por enviar. Podes definir o cronjob para correr de 10 em 10 minutos, por exemplo: se houver mails para enviar, envia, senão, morre silencioso...

Era também porreiro, caso alguém soubesse como implementar, a cada email enviado com sucesso, no fim, mostrar quais os emails que foram enviados com sucesso, uma espécie de "Status".

Guardas na BD o resultado do envio. Atenção, que esse resultado não é garantia de tenha chegado, para isso há outros truques, dependendo do MTA que estás a usar.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Sim, eu sei o que é o "cron". Mas eu não posso utilizar essa ferramenta, pois precisava de um servidor linux, ou algo semelhante a correr. E eu apenas estou a fazer testes via localhost.

Mas dá para fazer o que eu quero com o Process Control? Em cada Newsletter List, eu tenho uma Label que diz: "Enviar" e quando submetida ele envia a Newsletter para todos os emails registados naquela Newsletter.

O relevante nisto tudo é que eu sou obrigado a ficar com a página aberta à espera que o processo seja concluído, coisa que o patrão não quer.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado
Mas eu não posso utilizar essa ferramenta, pois precisava de um servidor linux, ou algo semelhante a correr. E eu apenas estou a fazer testes via localhost.

Não disseste, mas parto do princípio que o teu localhost é uma máquina Windows, certo?

Mas dá para fazer o que eu quero com o Process Control?

Se tens uma máquina Windows, não. O process control é só para máquinas *nix.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Então sendo a minha máquina Windows e não tendo servidor Linux, não posso utilizar nem o cron nem o Process Control, correcto?

Então, é-me impossível realizar esta tarefa? Ou existem outras alternativas?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Então sendo a minha máquina Windows e não tendo servidor Linux, não posso utilizar nem o cron nem o Process Control, correcto?

Então, é-me impossível realizar esta tarefa? Ou existem outras alternativas?

Tens a alternativa de instalar uma máquina aí na rede local com as mesmas configurações do servidor de produção, que é assim que se deve trabalhar... :cheesygrin: Depois já tens tudo à disposição.

Em última análise, tens a primeira coisa que viste, embora depois te arrisques a que não funcione no servidor de produção...


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Podes instalar um dos vários softwares que permite agendar tarefas no windows, existem várias implementações de cron que funcionam em windows.

Mas o sistema de produção é windows ou linux? Se estás apenas a testar em windows mas depois o sistema vai correr em servidores GNU Linux, podes instalar um ubuntu com o wubi ou um uma máquina virtual. Dessa forma podes testar com um sistema GNU Linux e desenvolver o que precisas.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Tens a alternativa de instalar uma máquina aí na rede local com as mesmas configurações do servidor de produção, que é assim que se deve trabalhar... :cheesygrin: Depois já tens tudo à disposição.

Em última análise, tens a primeira coisa que viste, embora depois te arrisques a que não funcione no servidor de produção...

Creio que mesmo o artigo que mostrei também não seja possível aplicar. Eu pelo menos não estou a conseguir executar nada, até criei uma function mas em nada deu.

Podes instalar um dos vários softwares que permite agendar tarefas no windows, existem várias implementações de cron que funcionam em windows.

Mas o sistema de produção é windows ou linux? Se estás apenas a testar em windows mas depois o sistema vai correr em servidores GNU Linux, podes instalar um ubuntu com o wubi ou um uma máquina virtual. Dessa forma podes testar com um sistema GNU Linux e desenvolver o que precisas.

Não, o sistema não vai correr em nenhum servidor a não ser no meu local.

Acho que o melhor é dar a perceber estes aspectos a quem me "encomendou" esta tarefa.

Obrigado a ambos  :thumbsup:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Nesse caso, uma alternativa simples seria instalar um software para windows que faz o mesmo que o cron. Sei que usei um gratuito e que funcionava exactamente como o cron para GNU Linux mas não sei como se chama, de qualquer modo, uma pesquisa por este tipo de software dá-te bastantes resultados.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.