실제, 전체 내용 :이것은 PHP 버그입니까, 아니면 제 시간대/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();
}
날짜 시간 생성자는 그것을 구문 분석 할 수없는 경우 예외를 throw한다 문자열을 받아들입니다. 이것은 내 로컬 컴퓨터에서 잘 실행하지만 내 원격 서버 중 하나에 예외가 catch되지 않는 (다시, 나는 시도/캐치와 똑같은 코드를 사용 오전 ) : 원격 서버 곳에 대한
Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() [function.DateTime---construct]: Failed to parse time string (lol) at position 0 (l): The timezone could not be found in the database' in /var/www/html/site_com/rez/date.php:9 Stack trace: #0 /var/www/html/site_com/rez/date.php(9): DateTime->__construct('lol') #1 {main} thrown in /var/www/html/site_com/rez/date.php on line 9
설정 예외가 잡힌되지 않은 : 그것은 작동합니까
PHP Version 5.2.5
date date/time support enabled "Olson" Timezone Database Version 2007.9 Timezone Database internal Default timezone America/Chicago
Directive Local Value Master Value date.default_latitude 31.7667 31.7667 date.default_longitude 35.2333 35.2333 date.sunrise_zenith 90.583333 90.583333 date.sunset_zenith 90.583333 90.583333 date.timezone no value no value
내 로컬 설정 : 로컬
PHP 5.2.10
date date/time support enabled "Olson" Timezone Database Version 0.system Timezone Database internal Default timezone System/Localtime
Directive Local Value Master Value date.default_latitude 31.7667 31.7667 date.default_longitude 35.2333 35.2333 date.sunrise_zenith 90.583333 90.583333 date.sunset_zenith 90.583333 90.583333 date.timezone no value no value
, 그것은 예외 PRI를 잡는다 오류를 알리지 않습니다. 둘 다에 date.timezone
는 아무 가치도 없다.
아마 내 내부 시스템의 시간대는 꺼져 있을까요? 내 로컬 상자는 우분투이고 내 리모콘은 CentOS이다. 아마 일치하지 않을 것이지만 PHP가 예외를 잡아서는 안된다.
참고 사항 관리자 권한이 없으므로 원격 상자에서 PHP를 업데이트 할 수 없습니다.
DateTime 클래스를 확장하고 위의 코드로 생성자를 재정의 할 수도 있습니다. 단, new DateTime 대신 parent :: __ construct() . 프로토 타입은 동일해야하므로 구문에 두 개의 매개 변수 (string $ str, DateTimeZone $ timezone = null)를 사용해야합니다.이를 통해 uncatchable 예외 __construct()가 문제의 원인인지 판단 할 수 있습니다. – Frankie
그래, 난 strtotime을 사용하고있어 그것이 실패하지 않는지 확인한 다음, DateTime 생성자에 공급한다. 나는 확장하려고 노력할 것이다. –
이것을 PHP 5.5.9ubuntu에서 재현 할 수 있습니다. – CarstenSchmitz