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