【发布时间】:2011-01-16 20:59:58
【问题描述】:
文件的真实完整内容:
<?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 构造函数接受一个字符串,如果它不能解析它应该抛出一个异常。这在我的本地机器上运行良好,但在我的一台远程服务器上没有捕获到异常(再次,我 am 使用 try/catch 和 SAME EXACT 代码):
致命错误:未捕获的异常 带有消息的“异常” 'DateTime::__construct() [function.DateTime---construct]: 无法解析时间字符串 (lol) 位置 0 (l):时区不能 可以在数据库中找到 /var/www/html/site_com/rez/date.php:9 堆栈跟踪:#0 /var/www/html/site_com/rez/date.php(9): DateTime->__construct('lol') #1 {main} 投入 /var/www/html/site_com/rez/date.php 上 第 9 行
未捕获异常的远程服务器设置:
PHP 版本 5.2.5
启用日期日期/时间支持 “奥尔森”时区数据库版本 2007.9 时区数据库内部默认时区美国/芝加哥
指令本地值主值 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 无值 无值
我的本地设置在哪里工作:
PHP 5.2.10
启用日期日期/时间支持 “奥尔森”时区数据库版本 0.system Timezone Database internal Default timezone System/Localtime
指令本地值主值 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 无值 无值
在本地,它捕获异常并将错误打印出来。两者上的date.timezone 都没有价值。
也许只是我内部系统的时区关闭了?我的本地机器是 Ubuntu,我的远程机器是 CentOS,它们可能不一致,但 PHP 不应该仍然捕获异常吗?
仅供参考,因为我没有管理员权限,所以无法在远程机器上更新 PHP。
【问题讨论】:
标签: php datetime exception-handling timezone