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 больше не заполняется.