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

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

mail.log    /var/log/phpmail.log

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

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

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

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

4 ответа

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

Если это не сработает, 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() не рекомендуется, это очень простой и довольно трудно использовать правильно и безопасно.

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

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

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

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

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

$mail_to = "MyAddress@email.com";
$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.";
}

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

error_reporting(0);

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

Другие вопросы по тегам