Реальное, полное содержание файла:
<?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 на удаленном поле, так как у меня нет прав администратора.
Я ставлю на ошибку PHP. Я знаю, что в PHP раньше были проблемы с перехватом исключений, создаваемых конструкторами, и, похоже, именно это здесь и происходит.
Поскольку это ошибка, ваши варианты:
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();
}
Не уверен, в чем именно проблема, но попробуйте установить часовой пояс с помощью этой функции:
date_default_timezone_set('Europe/London'); // or whatever timezone
И посмотрите, работает ли это.