PHP mail: как переопределить или обходить настройку mail.log

phpinfo() возвращает этот конкретный параметр, который является проблематичным:

mail.log    /var/log/phpmail.log

Проблема заключается в том, что я не могу получить доступ к файлу phpmail.log, чтобы установить для него права CHMOD, поэтому мой error_log заполняет следующую ошибку каждый раз, когда срабатывает почта():

PHP Warning:  mail(/var/log/phpmail.log): failed to open stream: Permission denied

Если это вообще возможно, я бы вообще пропустил регистрацию. В противном случае, определите другой файл журнала, который я могу, вы знаете, на самом деле манипулируете.

ps - это не дубликат какого-либо другого потока. Я не могу изменить значения CHMOD вышеупомянутых файлов, мой вопрос в том, чтобы переопределить параметр, чтобы вообще пропускать ведение журнала электронной почты.

Ответ 1

Сначала я попытался бы связаться с тем, кто управляет вашим сервером, он или она должен исправить эту проблему.

Если это не сработает, параметр mail.log - это PHP_INI_PERDIR, что означает:

Запись может быть установлена ​​в php.ini,.htaccess, httpd.conf или .user.ini(начиная с PHP 5.3)

Очевидно, что вы не можете получить доступ к системе php.ini и httpd.conf, но если вам предоставляется .user.ini или вам разрешено изменять настройки в .htaccess, то это будет способом для решения этой проблемы.

См:
. файлы user.ini
Установить значения php.ini с использованием .htaccess

В качестве альтернативы вы можете использовать Swift Mailer или PHPMailer, которые не нуждаются в функции mail(). В общем случае использование mail() не рекомендуется, оно очень простое и довольно сложное в использовании правильно и надежно.

Ответ 2

Вы можете изменить путь к файлу mail.log в параметре php.ini в доступное для записи место для Apache или любого сервера, который вы используете.

Ответ 3

Я новичок в PHP, поэтому не знаю, действительно ли мое решение - это способ решить эту проблему или если она работает из-за совпадения!

У меня та же проблема, представленная здесь: вызов функции PHP mail() вызывает предупреждение PHP. Все объяснено в первом сообщении. У меня также нет разрешения на редактирование mail.log или каталога для его сохранения.

Googling, я нашел код, который вызывает mail(), которому предшествует @. Я попытался использовать код @mail(), и он сработает!

Итак, это рабочий код, который я использую:

$mail_to = "[email protected]";
$mail_from = $email; // This e-mail address is taken by an HTML form
$mail_subject = "Test PHP function";
$mail_body = "<p>This is the body message for the test of a PHP function!</p>";

// HTML headers
$mail_in_html = "MIME-Version: 1.0
";
$mail_in_html .= "Content-type: text/html; charset=iso-8859-1
";
$mail_in_html .= "From: <$mail_from>";

// Submission process
if(@mail($mail_to, $mail_subject, $mail_body, $mail_in_html))
{
    print "E-mail sent!";
}
else
{
    print "Error: e-mail not sent.";
}

Ответ 4

В итоге я нашел этот код, и он достаточно хорош:

error_reporting(0);

Вставить прямо перед вызовом функции mail(). Error_log больше не заполняется.