1

PHPMailer を使用して顧客に電子メールを送信する PHP コマンド ラインでループ スクリプトを実行しています。私が受けている問題は、PHPMailer が false を返したときにコマンド ライン スクリプトが終了することです。

スクリプトの擬似コードは次のとおりです。

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..
}

$mail->Send()が false を返す場合、スクリプトは停止して終了します。これは、コマンド ラインでの PHP の予期される動作ですか? その場合、PHP が false を受け取ったときに停止しないように指示する方法はありますか?

助けてくれてありがとう。

4

2 に答える 2

2

$mail->Send()関数(または完全に他の何か)がエラーをスローして、スクリプトの実行を停止していると思います。

データベースでも値が更新されていないと思いますか?もしそうなら、これが当てはまります。これを判断するには、エラーレポートをオンにしてスクリプトを実行します。

error_reporting(E_ALL);
ini_set('display_errors', true);
于 2010-02-08T10:02:55.930 に答える
1

ほとんどの場合、エラー処理ルーチン (else ブランチ内) が呼び出されるexitか、致命的なエラーが発生して、php が救済されます。
2 行のデバッグ出力を追加して、スクリプトが else ブランチに出入りする (正常に終了する) かどうかを確認します。

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');
        }
     [...]
于 2010-02-08T10:20:54.240 に答える