加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

这是一个php错误,还是我的timezone / PHP设置有问题?

发布时间:2020-12-13 13:35:48 所属栏目:PHP教程 来源:网络整理
导读:文件的真实,完整内容: ?phperror_reporting(E_ALL);ini_set(display_errors,'on');try { //$x = strtotime('blah'); $x = new DateTime('lol');} catch ( Exception $e ) { echo $e-getMessage();} DateTime构造函数接受一个字符串,如果它无法解析它,它应该
文件的真实,完整内容:
<?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构造函数接受一个字符串,如果它无法解析它,它应该抛出异常.这在我的本地计算机上运行正常但在我的一个远程服务器上没有捕获到异常(并且我再次使用try / catch和SAME EXACT代码):

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

在本地,它捕获异常并打印出错误.两者的date.timezone都没有价值.

也许这只是我内部系统的时区关闭?我的本地方框是Ubuntu而我的遥控器是CentOS,它们可能不一致但是PHP不应该仍然能够捕获异常吗?

仅供参考我无法在远程复选框上更新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();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读