9

我一直在 stackoverflow 和许多其他网站上寻找想法,但到目前为止没有任何工作,我需要更直接的帮助。

我有一个专用的 Ubuntu 服务器(9.04 jaunty),我在那里运行几个 PHP 网站,使用 apache2。我的问题是 mail() 函数已停止工作。不久前,我一直在使用 PEAR Mail Queue 处理大多数电子邮件,所以我不确定 mail() 何时停止工作,但我仍然需要它来设置 OpenCart 以及其他一些东西,但是 mail()无论我做什么,都会返回 false。即使是这个简单的代码也行不通:

<?php
mail('mail@example.com','test','test');
?>

所以,我一直在查看 php.ini 中的 Sendmail-settings,所有这些都签出,当我在命令行中运行它时,它工作正常并向我发送一封电子邮件:

# sendmail
mail@example.com
test message

所以我认为可能是php本身有问题,所以我尝试了以下命令:

# php -r "mail('mail@example.com','test','test');"

它还可以毫无问题地发送电子邮件!那会是什么?我开始认为这可能是某种权限问题,也许 www-data 在运行脚本时遇到了一些问题。仍然不确定,因为我什至无法运行此脚本:

<?php
echo exec('whoami');
?>

它也返回错误!我已经运行了visudo命令并添加了以下行以防万一:

www-data ALL=(ALL) ALL

我已经将文件的用户和组所有者从root:root更改为www-data:www-data但仍然没有!

我还能尝试什么?一定有什么!谁能帮我?

4

4 回答 4

2

命令行和网络服务器不共享相同的 php.ini!检查命令行和服务器模块中使用了哪个 php.ini。

于 2012-09-11T15:53:28.027 回答
0

几周前我遇到了同样的问题。我试过了:

还有其他几个。

我的错误日志中有一个条目说Segmentation fault. 2天后发现问题。我在我的 debian 系统上使用了 Exim4,与 apache2 的组合出现了分段错误。我用 Postfix 替换了 Exim4,它起作用了!

但是,在您的情况下,您不能像 exec 一样运行whoami,您应该追求这条道路。

因为邮件功能最终会来到操作系统,所以一个 exec 命令应该可以工作!

于 2012-09-11T15:11:56.427 回答
0

您可以使用 phpMailer throw SMTP 发送电子邮件,而无需使用 mail() 函数。代码在这里(http://phpmailer.worxware.com/) 只是一个想法

可能可以使用opencart的这个扩展来使用phpmailer来代替邮件功能。我没有对此进行测试,并认为它可能会给某人一些想法。

于 2012-09-11T15:29:26.427 回答
0

就我而言,它用于我正在php-fpm使用的 Magento docker 图像。它保持 php 预加载(带有配置)。

重新启动后,它获得了新设置:如何重新启动或只是sudo killall php-fpm.

于 2017-10-27T06:47:01.623 回答