Действительно ли это - php ошибка или является чем-то не так с моими timezone/PHP настройками?

Реальное, полное содержание файла:

<?php

error_reporting(E_ALL);
ini_set(display_errors, 'on');

try {

    //$x = strtotime('blah');
    $x = new DateTime('lol');

} catch ( Exception $e ) {
        echo $e->getMessage();
}

Конструктор DateTime принимает строку, которая должна выдать исключение, если это не может проанализировать его. Это хорошо работает на моей локальной машине, но на одном из моих удаленных серверов не поймано исключение (и снова, я использую попытку/выгоду и ТОТ ЖЕ ТОЧНЫЙ код):

Фатальная ошибка: Неперехваченное исключение 'Исключение' с сообщением 'DateTime:: __ конструкция () [функция. Конструкция DateTime---]: Не удалось проанализировать строку времени (lol) в положении 0 (l): часовой пояс не мог быть найден в базе данных' в/var/www/html/site_com/rez/date.php:9 Отслеживании стека: № 0/var/www/html/site_com/rez/date.php (9): DateTime-> __ конструкция ('lol') № 1 {основной} добавленный/var/www/html/site_com/rez/date.php на строке 9

Настройки для удаленного сервера, где исключение не поймано:

Версия 5.2.5 PHP

дата/время даты поддерживает включенную Базу данных Часового пояса Версии 2007.9 Базы данных Часового пояса "Olson" внутренний часовой пояс По умолчанию Америка/Чикаго

Направляющая Локальная Ведущая дата default_latitude Значения Значения 31.7667 31,7667 даты default_longitude 35.2333 35,2333 дат sunrise_zenith 90.583333 90,583333 даты sunset_zenith 90.583333 90.583333 date.timezone никакое значение никакое значение

Мои локальные настройки, где это действительно работает:

PHP 5.2.10

дата/время даты поддерживает включенную Базу данных Часового пояса Версии 0.system Базы данных Часового пояса "Olson" внутренний часовой пояс По умолчанию System/Localtime

Направляющая Локальная Ведущая дата default_latitude Значения Значения 31.7667 31,7667 даты default_longitude 35.2333 35,2333 дат sunrise_zenith 90.583333 90,583333 даты sunset_zenith 90.583333 90.583333 date.timezone никакое значение никакое значение

Локально, это ловит исключение и распечатывает ошибку. date.timezone на обоих не значение.

Возможно, это - просто часовые пояса моей внутренней системы, которые являются прочь? Моим локальным полем является Ubuntu, и моим удаленным является CentOS, они, вероятно, непоследовательны, но не был должен PHP все еще ловить исключение?

К вашему сведению я не могу обновить PHP на удаленном поле, так как у меня нет прав администратора.

8
задан meder omuraliev 15 February 2010 в 05:55
поделиться

2 ответа

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

Поскольку это ошибка, ваши варианты:

  1. Обновить версию PHP сервера; вы сказали, что это не вариант
  2. Используйте strtotime () , чтобы найти дату, или, если вам нужен или вы хотите получить доступ к объектно-ориентированному стилю DateTime , поймайте ошибка с strtotime ()

Например:

<?php

try {

    if (@strtotime($str) !== false) {
        $x = new DateTime($str);
    } else {
        throw new Exception("Failed to parse string ({$str})");
    }

} catch ( Exception $e ) {
    echo $e->getMessage();
}
10
ответ дан 5 December 2019 в 15:23
поделиться

Не уверен, в чем именно проблема, но попробуйте установить часовой пояс с помощью этой функции:

date_default_timezone_set('Europe/London'); // or whatever timezone

И посмотрите, работает ли это.

1
ответ дан 5 December 2019 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: