Я смотрел вокруг stackoverflow и многих других сайтов для идей, но до сих пор ничего не работало, и мне нужна более непосредственная помощь.
У меня есть выделенный Ubuntu Server (9.04 jaunty), и я запускаю несколько веб-сайтов PHP с apache2. Моя проблема в том, что функция mail () перестала работать. Через некоторое время я использую PEAR Mail Queue для большинства электронных писем, поэтому я не уверен точно, когда mail () перестала работать, но я все еще нуждаюсь в ней для установки OpenCart, среди нескольких других вещей, но mail () возвращает false, независимо от того, что я делаю. Даже этот простой код не будет работать:
<?php mail('mail@example.com','test','test'); ?>
Итак, я смотрел настройки Sendmail в php.ini, которые все проверяют, и когда я запускаю это в командной строке, он отлично работает и отправляет мне электронное письмо:
# sendmail mail@example.com test message
Поэтому я подумал, что это может быть проблема с php, поэтому я пробую следующую команду:
# php -r "mail('mail@example.com','test','test');"
И он также отправляет письмо без каких-либо проблем! Так что же это может быть? Я начал думать, что это может быть проблема разрешения, возможно, у www-data возникли проблемы с запуском скрипта. Все еще не уверен в этом, потому что я даже не могу запустить этот скрипт:
<?php echo exec('whoami'); ?>
Он также возвращает false! Я запустил команду visudo и добавил на всякий случай следующую строку:
www-data ALL=(ALL) ALL
И я изменил пользователей и владельцев групп файлов от root: root до www-data: www-data, но все равно ничего!
Что еще я могу попробовать? Там должно быть что-то! Может кто-нибудь мне помочь?
Командная строка и веб-сервер не используют один и тот же php.ini! Проверьте, какой php.ini используется в командной строке и в модуле сервера.
У меня была такая же проблема несколько недель назад. Я пытался:
И еще несколько других.
У меня была запись в журнале ошибок, в которой говорилось об ошибке Segmentation fault
. Через 2 дня нашел проблему. Я использовал Exim4 в моей системе debian, комбинация с apache2 дала ошибку сегментации. Я заменил Exim4 на Postfix, и он сработал!
Однако в вашем случае вы не можете запускать exec как whoami
и вы должны следовать этому пути.
Поскольку функция почты в конечном итоге приходит к os, команда exec должна работать!
Вы можете отправить электронное письмо с помощью phpMailer, чтобы отправить SMTP с помощью функции mail (). Код здесь (http://phpmailer.worxware.com/) Просто идея
возможно, может использовать эту расшифровку для opencart для использования phpmailer для замены функции почты. Я не проверял это только так и думал, что это может дать кому-то некоторые идеи.
В моем случае это был php-fpm
используемый в изображении докеры Magento, с которым я играл. Он поддерживает предварительную загрузку php (с конфигурацией).
После перезагрузки он взял новые настройки: как перезапустить или просто sudo killall php-fpm
.