我在PHP命令行中运行一个循环脚本,它使用PHPMailer向客户发送电子邮件。我收到的问题是当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在收到错误时不要停止?
感谢您的帮助。
答案 0 :(得分:2)
我猜想$mail->Send()
函数(或其他完全不正确的函数)会抛出一个错误,即停止执行脚本。
我认为数据库中的值没有得到更新?如果是这样的话就是这种情况。运行带有错误报告的脚本以确定这一点。
error_reporting(E_ALL);
ini_set('display_errors', true);
答案 1 :(得分:1)
很可能错误处理例程(在else分支中)调用exit
或导致致命错误,让php纾困。
添加两行调试输出以检查脚本是否进入并离开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');
}
[...]