Pergunta

Estou executando um script de loop na linha de comando PHP, que envia e -mails para os clientes usando o Phpmailer. O problema que estou recebendo é que o script da linha de comando sai quando o phpmailer retorna um falso.

Aqui está o script pseudocode:

while(the loop is valid){
    if(mail ID exists){
        set_time_limit(30);
        ..compose mail..
        if($mail->Send()){
            ..Mark as success in database..
            usleep(10000);
        } else {
            ..Mark as failure in database..
            usleep(10000);
        }
    }
    ..continue loop..
}

Se o $mail->Send() Retorna um falso, o script para e sai. Este é um comportamento esperado do PHP na linha de comando? Se for esse o caso, existe alguma maneira de dizer ao PHP para não parar quando recebe um falso?

Obrigado por qualquer ajuda.

Foi útil?

Solução

Eu acho que o $mail->Send() Função (ou algo mais completamente) está lançando um erro que está interrompendo a execução do seu script.

Pego que os valores também não estão sendo atualizados no banco de dados? Este será o caso, se assim for. Execute o script com o relatório de erros para determinar isso.

error_reporting(E_ALL);
ini_set('display_errors', true);

Outras dicas

Provavelmente a rotina de manuseio de erros (no ramo else) exit ou causa um erro fatal que permite que o PHP rescique.
Adicione duas linhas de saída de depuração para verificar se o script entra e sai da filial else (com sucesso).

while(the loop is valid){
     [...]
        } else {
          error_log('Debug: Send() failed. Start error handling');
          ..Mark as failure in database..
          usleep(10000);
          error_log('Debug: Send() failed. End error handling');
        }
     [...]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top