【发布时间】:2014-03-23 08:49:34
【问题描述】:
在我的 Web 应用程序中,当用户更改其帐户时,我调用 php mail() 函数向该用户发送电子邮件通知。实施此操作后,我发现帐户更改操作需要很长时间(> 20 秒)才能完成。我怀疑这是因为 PHP 等待 mail() 函数发送电子邮件。有没有什么方法可以不用等待就直接调用下一行代码?
谢谢,
保罗
【问题讨论】:
-
你怀疑?您是否对此进行了基准测试?
-
@MonkeyZeus 如果我注释掉对邮件函数的调用,服务器响应时间不到三秒。如果我允许它调用邮件功能,它需要二十多秒。我认为可以肯定地说邮件功能是罪魁祸首。
-
出了点问题。 mail() 函数不应该花那么长时间来执行。您可能想弄清楚为什么 mail() 函数需要这么长时间。您的 php.ini 文件应该向您显示 mail() 函数正在使用的底层系统命令。它应该被指定为 sendmail_path。如果您登录服务器并通过指定为 sendmail_path 的命令从命令行发送消息,执行需要大约 10 秒吗?如果是这样,听起来您的服务器上运行的 MTA 可能有问题。
-
即使是 3 秒,如果没有
mail(),在普通用户眼中也太长了。您的网络中发生了一些事情,导致mail()速度变慢,因此肯定应该解决这个问题,但您肯定需要考虑优化帐户更新过程。我不知道 PHP 可以以何种方式生成单独的函数而不是等待它们,但在客户端你当然可以实现 AJAX。 -
@MonkeyZeus 延迟三秒的原因是有问题的操作是通过信用卡进行订阅付款。