Получение ошибок/предупреждений 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, предупреждения об ошибках исчезают.

Где я ошибся?

Author: Sparky, 2012-12-06

3 answers

Это не имеет никакого отношения к CI. PHP требует, чтобы вы установили настройку date.timezone.

См. http://php.net/manual/en/datetime.configuration.php#ini.date.timezone

 4
Author: Greg Bair, 2012-12-05 22:09:25

Одна вещь, которая кажется странной, - это расположение 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

  1. Создайте файл с именем myphpini.ini (или что-то в этом роде) и поместите туда свои пользовательские настройки.
  2. Затем создайте файл с именем configphp.php (или что-то в этом роде), который читает myphpini.ini
  3. Включите 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/>';
}

Держите нас в курсе того, как все получилось

 2
Author: Tivie, 2012-12-06 03:38:06

Мне никогда не следовало создавать свой собственный пользовательский файл php.ini. Я построил его неправильно и разместил в неправильном месте. Несмотря на то, что я думал, что знал о проблеме, когда отправлял вопрос, я этого не сделал. Мой плохой файл php.ini все это время был основным источником этой проблемы.

 0
Author: Sparky, 2012-12-21 22:26:59