【发布时间】:2012-03-28 08:43:06
【问题描述】:
作为网站注册过程的一部分,我添加了邮件确认。但是由于某种原因,邮件函数在那里引发了内部服务器错误。
奇怪的是,如果我创建一个测试脚本,使用完全相同的电子邮件(所有相同的参数)它工作正常,并发送电子邮件。
邮件是从类中的函数发送的,以防万一。我没有发布代码,因为它并不真正相关,即使我尝试 mail('email@email.com','subject','email'); 它也会失败并出现 500 错误!
服务器错误日志根本不显示任何内容,有谁知道可能导致此类问题的原因吗?
技术:
服务器通过mod_fastcgi运行php,虽然如果我切换到mod_suphp也会出现这个问题。
更新:
更新: 我将尝试更好地解释这一点,如果使用相同的参数从另一个文件调用邮件功能,则可以完美地工作。这里的问题是与邮件功能结合使用会导致错误 500。调用它的文件的其余部分也很好,如果我评论邮件功能一切正常。它的调用方式是对文件的 AJAX 请求,该文件调用发送邮件的函数(以防万一)
更新 2:
为了回应到目前为止的答案,这里有更多我以前没有分享的信息:
操作系统:CentOS 5.8 版
当我说错误 500 时,我的意思是服务器只返回一个 HTTP 500 状态代码。
服务器在任何错误日志中都没有显示任何内容
最重要的是,如果我创建一个名为 test.php 的文件,只有 mail('address@domain.com','Subject','Message'),它就可以正常工作。从这个其他文件调用时,返回 500 状态代码。
我要问的是,是否有人知道,可能是从经验中知道是什么原因造成的。
更新 3: 昨天有人遇到同样的问题:PHP's mail() function causes a 500 Internal Server Error only after a certain point in the code
更新 4: 经过一些测试,我发现只有通过 AJAX 调用脚本时才会返回 500 stats 代码。如果我创建一个名为 test.php 的文件,并且我只是简单地放置邮件函数并对其进行测试,它就可以工作。通过 AJAX 调用它没有,有什么想法吗?
【问题讨论】:
-
启用 PHP 调试并发布错误信息。见:thinkvitamin.com/code/how-to-debug-in-php
-
将 PHP 错误报告设置为 all,它仍然给出错误 500。我已经安装了我自己的调试系统,但邮件功能似乎“覆盖”了所有内容,并且只是进入错误 500。
-
如果您的代码失败并且 Apache 为您提供 HTTP 状态,则无法获取任何日志。它必须在 apache、虚拟主机或至少 php 框架日志中。也许你的函数是用
error-output suppress功能@调用的,见stackoverflow.com/questions/7149030/… -
邮件函数不是用
@调用的,虽然我试过了,但发现它仍然给出错误500。我知道它是邮件函数,因为我逐行评论了测试在哪里是错误来自。奇怪的是,从另一个文件调用时具有相同参数的完全相同的邮件功能可以正常工作.... -
您确定是邮件功能导致了错误,而不是其他原因。例如,如果您注释掉对 mail() 函数的调用,脚本是否会按预期返回?