Ошибка PHP getdate () при переходе с PHP 5.2 на 5.3

1

Я столкнулся с той же проблемой, описанной здесь, с часовым поясом:

Конфигурация PHP. Небезопасно полагаться на настройки часового пояса системы

Я хочу иметь конструктивный разговор с моим сервисом хостинга. Поэтому сначала я сделал рытье самостоятельно. Это сервер Apache, я не уверен, на какой ОС он включен.

В моем phpinfo() указано следующее:

Loaded Configuration File   /usr/local/php53/lib/php.ini

и это для часовой пояс:

date/time support   enabled
"Olson" Timezone Database Version   2013.3
Timezone Database   internal
Default timezone    America/Chicago

Итак, на первый взгляд кажется, что часовой пояс установлен правильно. Но я все еще получаю ошибку:

getdate() [function.getdate]: It is not safe to rely on the system's
timezone settings. You are *required* to use the date.timezone setting
or the date_default_timezone_set() function. In case you used any of
those methods and you are still getting this warning, you most likely
misspelled the timezone identifier. We selected 'America/Chicago' for
'CST/-6.0/no DST' instead

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

Могу ли я позволить им уйти с этим ответом или я должен заставить их пойти проверить настройки в другом месте, которое заканчивается на /cli/php.ini?

Я думаю, я не понимаю, где этот файл был бы в моем случае, или почему он даже будет ссылаться, если phpinfo() говорит, что единственный загружаемый файл ini находится в /usr/local/php53/lib/php.ini

Любая помощь в понимании этого была бы очень оценена. Мне не нравится разговаривать с моими хозяевами, не имея полного понимания проблемы.

  • 0
    Вы упоминаете CLI. Это где ошибка появляется? Часто CLI и веб-сервер имеют разные файлы php.ini .
  • 0
    Это где мои знания не хватает. Я упомянул CLI только потому, что другой поток, на который я ссылался (в моем вопросе), говорил об этом. Я не понимаю, что это такое или что он делает, или я должен даже спросить об этом мой хостинг.
Теги:
getdate
php-5.3

2 ответа

0
Лучший ответ

Причина этого в том, что в версии 5.3 разработчики PHP решили, что часовой пояс будет явно установлен в файле PHP.ini (или в.htaccess или с использованием date_default_timezone_set()). Причина, по которой это было сделано, - это воспринимаемая проблема с более ранними версиями PHP, где часовой пояс не был установлен, и люди полагались на значение по умолчанию, которое часто не совсем корректно (например, потому, что они использовали размещенный сервер в другом часовом поясе). Это вызвало большое количество серьезных проблем, и требование о том, чтобы оно было четко указано, было попыткой решить эти проблемы.

Решение состоит в том, чтобы убедиться, что ваш файл PHP.ini содержит настройку часового пояса. Если вы находитесь на общем хосте и не можете обновить PHP.ini, вы можете установить его в локальном файле.htaccess (при условии, что вы находитесь на сервере Apache, другое программное обеспечение сервера может отличаться). И если вы не можете установить его там, вы должны установить его в коде.

У вашего хоста явно не установлен часовой пояс в PHP.ini. Учитывая, что сервер только обновляется с PHP 5.2, это не удивительно; 5.2 не требовал, чтобы он был установлен (по умолчанию он установлен в системном часовом поясе), поэтому его легко пропустить при обновлении.

С вашей точки зрения, вы можете полностью избежать общения с хостом, установив часовой пояс в.htaccess. Просто создайте файл.htaccess (или отредактируйте существующий) со следующей строкой:

php_value date.timezone "America/Chicago"

Однако в идеале это действительно должно быть задано в файле PHP.ini, и если это под вашим контролем хостов, то было бы хорошо, если бы вы поднимете его с собой - не устанавливая, это очень четкий признак того, что они действительно не знать что-нибудь о PHP, и они, конечно же, не протестировали их конфигурацию после обновления. Это должно вас беспокоить, потому что из-за этого могут возникнуть другие проблемы, ожидающие укусить вас; произошли некоторые существенные изменения в PHP между 5.2 и 5.3, ряд функций были устаревшими и изменены значения конфигурации по умолчанию, которые вам и вашему хосту действительно нужно знать при выполнении этого обновления.

Интересно, что решение об этом предупреждении о часовом поясе фактически находится в процессе реверсии: с предстоящим выпуском PHP 7.0 вам больше не нужно явно указывать часовой пояс в PHP.ini. Подробнее об этом изменении можно узнать здесь: https://wiki.php.net/rfc/date.timezone_warning_removal. На данный момент это явно не повлияет, но тем не менее это интересно.

В то время как я отвечаю, я бы хотел повторить итерацию абзаца выше - то есть выпуск PHP7 в следующем месяце - и указать, что вы обновляете версию PHP, которая уже давно устарела.

PHP 5.3 был объявлен End Of Life более года назад (август 2014 года) и с тех пор не обновлялся. Даже PHP 5.4 - это конец жизни (хотя это только что произошло). Я очень рад слышать, что вы отходите от 5.2, но вы не должны соглашаться на 5.3: я настоятельно рекомендую вам обновиться дальше, пока вы все равно выполняете работу по обновлению, потому что иначе это будет стоить вам больше времени в будущем.

Я не предлагаю идти до PHP7, но вы должны рассмотреть 5.4 как абсолютный минимум, а 5.5 или 5.6 в качестве предпочтительных версий сегодня. Безусловно, самая большая боль от обновления - от 5,2 до 5,3, так что вы уже сделали тяжелую работу; продвижение версии или еще два вряд ли будет какой-то дополнительной работой, пока вы это делаете.

  • 0
    Спасибо ... Возможно, я смогу перейти на 5.4, но по какой-то причине система корзин, в которой я работаю, не работает с 5.5. Если я сам не смогу повторно установить PHP-код корзины для перехода с 5,4 на 5,5, я застряну на 5,4 в течение очень долгого времени.
  • 0
    Кроме того , мой phpinfo () , кажется, показывают , что по умолчанию установлен ... так что я до сих пор не понимаю , почему я даже получаю эту ошибку (см мой оригинальный пост / вопрос вверх выше ...)
Показать ещё 3 комментария
0

вам необходимо установить часовой пояс

date_default_timezone_set('Europe/London');

http://php.net/manual/en/function.date-default-timezone-set.php

  • 0
    Это решает проблему, но я бы определенно установил для веб-хоста значение по умолчанию в php.ini а не в каждом скрипте PHP.
  • 0
    Правильно. Я добавил вызов функции в файл config.php приложения, который эффективно решит проблему, но я хочу понять, почему проблема возникает в первую очередь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню