几天前,我的自定义PHP应用程序中的所有mail()
调用都会导致500 Internal Server Error
,并且唯一记录的错误是Premature end of script headers
。通过SSH 运行文件有时会返回segfault
。 奇怪的是,在mail()
调用工作和停止工作之间没有代码更改(在Git中跟踪更改)。
即使没有对代码进行任何更改,我仍然经历了正常检查(.htaccess,php.ini,自定义错误处理程序等),只是为了安全。
我尝试通过删除应用程序中的代码来诊断问题,直到确定问题为止。但是,这并没有将其缩小到特定的代码段,而是将mail()
调用的时间加载到PHP(但尚未运行)的代码量。
在修剪后的应用程序中,我能够进行一次mail()
调用,但第二次调用失败。第一次通话是在include
来电之前(require
有相同的结果)。第二个是在包含文件的最开头(前面只是打开的PHP标记)。
我最初的想法是某种记忆问题。奇怪的是,导致mail()
调用抛出错误所需的内存使用量会根据从整个应用程序中保留/删除的代码而更改。如果它仍然可以帮助,在包含文件之前当前代码集合的内存使用是:
用法:3113696
最大:3352560
包含文件后的内存使用情况仍然未知。
我已经和我的主人谈过这个问题了,他们声称没有任何改变会导致这个问题。
我无法在其他应用程序中重现此问题。
如果在没有任何 PHP的情况下在代码中的某个点之后(但不是在任何特定调用之后)调用500 Internal Server Errors
时,我的PHP应用程序会导致mail()
导致{{1}}的原因代码被更改?
答案 0 :(得分:2)
如果有无法投递的电子邮件,则会出现此问题 - 如果您向网络托管发送电子邮件到同一个域,则可能会发生这种情况。网络服务器可能“错误配置”以认为它是域的邮件服务器 - 这是我的新网络主机中的默认设置(w00t!或不是)
示例:example.com的Web主机向archive@example.com发送邮件,但由于配置错误(),Web主机认为它需要在本地交付。此操作失败,Web服务器报告上述错误500.
修复方法是将服务器配置为不充当域的邮件服务器。 (我的主机在DNS控制面板中有一个选项。:s)。通过发送到非关联域进行测试。
答案 1 :(得分:1)
听起来像sendmail或者用于发送邮件的任何邮件()都可能会死亡。尝试在命令行中运行脚本,看看你得到了什么输出。
答案 2 :(得分:1)
转移到具有类似配置的其他服务器解决了这个问题,因此事实上它似乎与主机服务器有关(具体原因未知,遗憾的是,它可能仍然是一个谜)。
答案 3 :(得分:0)
这个显式代码可能是原因,此页面不起作用, 域目前无法处理此请求。 HTTP错误500 可以通过使用高级phpmailer类来避免:https://github.com/PHPMailer/PHPMailer
答案 4 :(得分:-1)
错误必定发生,因为用于发送邮件的php文件可由组写入。您应该使用权限' 644'对于PHP。