首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP & cPanel:当电子邮件被发送到PHP并发生错误时,如何防止弹出?

PHP & cPanel:当电子邮件被发送到PHP并发生错误时,如何防止弹出?
EN

Stack Overflow用户
提问于 2015-09-25 21:56:02
回答 1查看 921关注 0票数 1

通过cPanel电子邮件用户筛选成功地将电子邮件发送到PHP脚本中,但是PHP脚本有一个执行时间限制(以防止DoS)。当时间限制错误发生时,电子邮件会弹出。

尽管这是一个PHP错误正在产生的反弹,这个错误实际上不能被修正,这就是为什么有一个时间限制。

反弹消息的示例如下:

此邮件是由邮件传递软件自动创建的。 无法将您发送的邮件传递给一个或多个收件人。这是一个永久的错误。以下地址(Es)失败: -q /home/foo/bar/script.php 由moo@beer.cl生成 本地传递失败--这是消息的副本,包括所有的标头。 -.

第一件事可能会想到,执行时间限制错误是打印一条消息(这会自动导致反弹),但事实并非如此,因为ini_set('display_errors', false);是设置的。没有打印任何内容的证据是缺乏:“在传递过程中生成了以下文本:.”在上面引用的信息中。

小小的考验:

代码语言:javascript
复制
#!/usr/bin/php -q
<?php
    set_time_limit(1);
    ini_set('display_errors', false);
    $fh_stdin = fopen('php://stdin', 'rb');
    while (true) rand();
?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-28 05:20:49

不确定这里是否有问题,但是邮件处理程序会弹出消息,因为当PHP脚本由于错误而异常终止时,PHP进程将向shell返回一个非零值(在本例中为255)。

当您的MTA通过管道将电子邮件发送到您的脚本时,由于它的返回值大于0,它会看到它失败了,它认为它是一个失败,并弹出消息(可能包括反弹消息中的任何脚本输出)。

如果不能(或不希望)更改这些管道进程的最大执行时间,一种解决方案是将消息排队,由其他脚本处理,在该脚本中,可以将处理分解为各个部分或增加时间限制。

使用register_shutdown_function()set_error_handler(),我无法用exit(0)覆盖PHP的返回值,因此这可能不是一个解决办法。

您应该能够增加使用set_time_limit的时间,除非您的PHP在安全模式下运行,否则它不会这样做。但是,如果进程真正长时间运行,则最好将消息排队处理,而不是在消息传入时尝试处理,因为这可能会导致瓶颈或服务器重载。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32791205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档