Получение ошибок/предупреждений PHP при использовании CodeIgniter 2 для отправки электронной почты
Я использую Ion Auth и пытаюсь реализовать функцию забытого пароля, которая основана на отправке электронной почты от CI. Мой сервер LAMP находится в общей учетной записи cPanel и использует sendmail
. Тем не менее, у меня есть возможность переопределить любые настройки PHP с помощью моего собственного файла php.ini
в каталоге public_html
.
В соответствии с документацией CodeIgniter 2 для настройки отправки электронной почты я сделал следующее...
1) создал файл с именем, расположенный по адресу application/config/email.php
2) email.php
содержит этот код:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| EMAIL SENDING SETTINGS
| -------------------------------------------------------------------
*/
$config['protocol'] = 'sendmail';
/* End of file email.php */
/* Location: ./application/config/email.php */
3) В файле application/config/ion_auth.php
я установил это значение равным TRUE
$config['use_ci_email'] = TRUE;
Электронное письмо успешно отправлено, но я получаю множество предупреждений об ошибках PHP на всех страницах.
Они появляются на всех страницах, иногда два или три раза подряд:
Обнаружена ошибка PHP
Серьезность: Предупреждение
Сообщение: дата() [функция.дата]: Небезопасно полагаться на часовой пояс системы настройки. От вас требуется использовать настройку date.timezone или функцию date_default_timezone_set(). Вы должны использовать настройку date.timezone или функцию date_default_timezone_set(). В случае, если вы использовали любой из этих методов, и вы все еще получаете это предупреждение, вы, скорее всего, неправильно написали идентификатор часового пояса. Мы выбрали "Америка/Нью-Йорк" для "EST/-5.0/без летнего времени" вместо
Имя файла: libraries/Email.php
Номер строки: 704
Обнаружена ошибка PHP
Серьезность: Предупреждение
Сообщение: дата() [функция.дата]: Небезопасно полагаться на настройки часового пояса системы. От вас требуется использовать настройку date.timezone или функцию date_default_timezone_set(). Вы должны использовать настройку date.timezone или функцию date_default_timezone_set(). В случае, если вы использовали любой из этих методов, и вы все еще получаете это предупреждение, вы, скорее всего, неправильно написали идентификатор часового пояса. Мы выбрали "Америка/Нью-Йорк" для "EST/-5.0/без летнего времени" вместо
Имя файла: libraries/Email.php
Номер строки: 709
В дополнение к вышесказанному, эти два также появляются после отправки формы с забытым паролем:
Обнаружена ошибка PHP
Серьезность: Предупреждение
Сообщение: Не удается изменить информацию о заголовке - заголовки уже отправлены (вывод начат с /home/имя пользователя/кодовое имя/система/ядро/Исключения.php:185)
Имя файла: libraries/Session.php
Номер строки: 675
Ошибка PHP была встреченный
Серьезность: Предупреждение
Сообщение: Не удается изменить информацию о заголовке - заголовки уже отправлены (вывод начат с /home/имя пользователя/кодовое имя/система/ядро/Исключения.php:185)
Имя файла: helpers/url_helper.php
Номер строки: 540
Я не уверен, почему я буду получать эти предупреждения об ошибках или как еще я должен настроить параметры отправки электронной почты. Я не вижу никаких других вариантов отправки электронной почты в документация, относящаяся к этим конкретным предупреждающим сообщениям. Когда я удаляю свой файл config/email.php
И устанавливаю для Ion Auth use_ci_email
значение FALSE
, предупреждения об ошибках исчезают.
Где я ошибся?
3 answers
Это не имеет никакого отношения к CI. PHP требует, чтобы вы установили настройку date.timezone
.
См. http://php.net/manual/en/datetime.configuration.php#ini.date.timezone
Одна вещь, которая кажется странной, - это расположение php.ini. Я имею в виду, что в папке public_html означает, что php.ini может быть доступен для чтения в мире, что может быть не самой лучшей идеей.
В любом случае, одним из способов устранения этой проблемы является создание test.php файл в вашей папке public_html только с phpinfo(INFO_CONFIGURATION);
и проверьте настройки (например, include_path или allow_url_fopen). Затем создайте файл php.ini в той же папке (с некоторыми настройками, такими как allow_url_fopen) и посмотрите, изменилось ли что-нибудь в phpinfo(INFO_CONFIGURATION)
.
Мой предполагаю, что либо:
- public_html/.htaccess файл указывает Apache считывать настройки php из файла php.ini, расположенного в папке public_html.
- у вашего хостинг-провайдера есть cpanel с mod_suphp (очень распространенный). suPHP по умолчанию позволяет каждому пользователю устанавливать свой собственный php.ini по своему усмотрению. Он переопределяет php.ini sustem.
Смотрите эту ссылку и эту
В любом случае, вы можете настроить настройки php.ini, не переопределяя их полностью ни одним из следующих параметров:
- Установите настройки в своих учетных записях root.htaccess
- создайте сценарий, который считывает и применяет настройки
Имейте в виду, что таким образом можно переопределить только параметры среды выполнения, помеченные как PHP_INI_ALL. Смотрите эту ссылку для получения дополнительной информации о режиме настроек и для получения полного списка изменяемых параметров php.ini
Первый путь очень прямой вперед:
.файл htaccess
<IfModule mod_php5.c>
php_value date.timezone "Europe/Lisbon"
php_admin_flag engine on
</IfModule>
Во втором используется пользовательский файл phpini.file
- Создайте файл с именем
myphpini.ini
(или что-то в этом роде) и поместите туда свои пользовательские настройки. - Затем создайте файл с именем
configphp.php
(или что-то в этом роде), который читаетmyphpini.ini
- Включите
configphp.php
в начало ваших сценариев (или в загрузочный файл CI2)
Configphp.php
$config = parse_ini_file('myphpini.ini);
foreach ($config as $key => $val) {
print 'before->' . ini_get($key) . '<br/>';
ini_set($key, $val);
print 'after->' . ini_get($key) . '<br/>';
}
Держите нас в курсе того, как все получилось
Мне никогда не следовало создавать свой собственный пользовательский файл php.ini
. Я построил его неправильно и разместил в неправильном месте. Несмотря на то, что я думал, что знал о проблеме, когда отправлял вопрос, я этого не сделал. Мой плохой файл php.ini
все это время был основным источником этой проблемы.