Como posso executar um script PHP em segundo plano após o envio de um formulário?

Problema
Eu tenho um formulário que, quando enviado, executará o código básico para processar as informações enviadas e inseri-las em um banco de dados para exibição em um site de notificação. Além disso, tenho uma lista de pessoas que se inscreveram para receber essas notificações por e-mail e mensagem SMS. Esta lista é trivial como o momento (apenas pressionando cerca de 150), no entanto, é suficiente para levar mais de um minuto para percorrer toda a tabela de assinantes e enviar mais de 150 e-mails. (Os emails estão sendo enviados individualmente, conforme solicitado pelos administradores do sistema do nosso servidor de email, devido a políticas de email em massa.)

Durante esse período, a pessoa que postou o alerta ficará na última página do formulário por quase um minuto, sem nenhum reforço positivo de que a notificação está sendo postada. Isso leva a outros problemas em potencial, todos os que têm soluções possíveis que considero menos do que ideais.

Primeiro, o pôster pode achar que o servidor está atrasado e clicar no botão 'Enviar' novamente, fazendo com que o script seja reiniciado ou executado duas vezes. Eu poderia resolver isso usando JavaScript para desativar o botão e substituir o texto para dizer algo como 'Processando ...', no entanto, isso é menos do que o ideal, porque o usuário ainda ficará preso na página durante a execução do script. (Além disso, se o JavaScript estiver desativado, esse problema ainda existe.)

Segundo, o pôster pode fechar a guia ou o navegador prematuramente após o envio do formulário. O script continuará sendo executado no servidor até tentar gravar novamente no navegador. No entanto, se o usuário navegar em qualquer página do nosso domínio (enquanto o script ainda estiver em execução), o navegador trará o carregamento da página até o final do script. . (Isso só acontece quando uma guia ou janela do navegador está fechada e não o aplicativo inteiro do navegador.) Ainda assim, isso é menos do que o ideal.

(Solução possível
Decidi que desejo dividir a parte "email" do script em um arquivo separado para o qual eu possa ligar após a publicação da notificação. Inicialmente, pensei em colocar isso na página de confirmação depois que a notificação foi publicada com êxito. No entanto, o usuário não saberá que esse script está em execução e nenhuma anomalia será aparente para ele; Este script não pode falhar.

Mas e se eu puder executar esse script como um processo em segundo plano? Portanto, minha pergunta é a seguinte: como executar um script PHP para disparar como um serviço em segundo plano e executar de forma completamente independente do que o usuário fez no nível do formulário?

EDITAR: estenão podes ser agendado. Ele deve ser executado no instante em que o formulário for enviado. Essas são notificações de alta prioridade. Além disso, os administradores de sistema que executam nossos servidores impedem que os crons sejam executados com mais frequência do que 5 minutos.

questionAnswers(15)

yourAnswerToTheQuestion