PHP报时区错误 ,不要说修改date.timezone="XXX" 都试过了不管用,centos6.3系统 php 5.4.15 mysql5.5

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP报时区错误 ,不要说修改date.timezone="XXX" 都试过了不管用,centos6.3系统 php 5.4.15 mysql5.5相关的知识,希望对你有一定的参考价值。

Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in/usr/local/apache2/htdocs/index.phpon line2

    永久修改:更改php.ini文件中的data.timezone = PRC  这是中国时间。重启Apache服务后生效。

    临时修改:在使用格式化输入时间之前,添加ini_set('date.timezone','Asia/Shanghai'); 或者data_default_timezone_set('PRC');//date_default_timezone_set() 函数设置用在脚本中所有日期/时间函数的默认时区。

从php5.1.0开始,php.ini里加入了date.timezone这个选项,默认情况下是关闭的也就是显示的时间(无论用什么php命令)都是格林威治标准时间,和我们的时间(北京时间)差了正好8个小时,有以下3中方法可以恢复正常的时间。

1.最简单的方法就是不要用php5.1以上的版本;

2.如果一定要用,而且不能修改php.ini,则需要在关于时间的初始化的语句的上面加上 date_default_timezone_set (XXX)。

参考技术A date_default_timezone_set(  'Asia/Shanghai'  );

在你的php最开头写个这个就行了

参考技术B 整好我也部署typecho,遇到和你一样的问题,安装环境是windows,工具是PHPstudy,默认使用了一个5.3.x的PHP版本,我直接改了一个5.7版本就好了。
虽然不一定能帮到你(毕竟你这儿问题已经很早了),但希望这个回答能帮到后来遇到问题的人
参考技术C 修改php.ini中的date.timezone = UTC还确实是正解,修改后要重新启动apache,另外你应该用phpinfo()检查一下你修改php.ini和phpinfo()中指明的当前php.ini是同一个文件。

如果还不行你就在php代码中加上类似
date_default_timezone_set('UTC'); //北京时间用Asia/Shanghai
的一行吧,要在你调用任何时间函数之前。本回答被提问者和网友采纳

跟着百度学PHP[11]-PHP当中的异常处理

首先要说一下常见的三种错误:

1.语法错误

2.运行错误

3.逻辑错误

00x1 错误报告及错误级别


PHP的错误分为三个等级

1.注意(notice)   没有变量a

2.警告(warning) 没有给函数传值

3.致命的错误(fatal error) 函数写错

错误的报告级别可以在PHP.ini当中修改。
在PHP.ini当中找到错误报告“error_reporting = E_ALL ” 这个的意思是将所有的错误都提示出来。
ps:~是除了的意思。&是和的意思。
error_reporting = E_warning & E_fatal error (仅提示警告warning和致命错误fatal error)
error_reporting = E_ALL ~ E_notice (提示全部,除了注意notice)

 

00x2 自定义PHP报告错误处理方式


什么叫做自定义报告错误的处理方式呢?

也就是

( ! ) Fatal error: Call to undefined function geaaattype() in D:\\wamp\\www\\dnf.php on line 2

按照我们意图来写。

很显然这个错误是PHP自己系统已经自带的。那么我们需要告诉PHP我们不要你自身的这个错误函数,我要自己创建一个。

set_error_handler("myerrorfun");(handler音译:处理)这个语句就是告诉PHP我要自己创建一个myerrorfun的错误信息。然后你需要定义一下这个函数。代码大概如下所示:

<?php 
set_error_handler("myerrorfun");#注册一个myerrorfun的错误函数
function myerrorfun($type,$mess,$file,$line){#这个函数有四个参数,分别是错误类型,错误信息,错误文件,错误行
}
 ?>

 

00x3 设置错误日志


在php.ini当中有显示错误:display_errors = On  默认是开着的,我们可以off关闭它。apache的日志文件:log_errors = On

如果想要把apache的日志文件写入windows的系统日志里面,就可以将:error_log = syslog开启。默认是被注释掉的。分号是注释。

 


 

00x4 PHP异常处理(try catch

如果有trow new exception的话那么就是有异常。

 1 <?php 
 2 echo "早上起床<br />";
 3 try{
 4 echo "开车上班。<br />";
 5 throw new Exception("车子爆胎。<br />");//抛出异常,有异常第六行的echo不进行执行直接执行catch
 6 echo "路况很好。";
 7 }catch(Exception $e){
 8 echo $e->getmessage();//其实这里的$e就是异常。Exception是系统已经定义好了的了一个类,调用其getmessage方法即可。
 9 echo "换上备胎,继续开车去上班。<br />";
10 }
11 ?>

 本来是按照顺序,1-2-3-4-5-6....这样执行的,但是当程序执行到throw new Exception(抛出新的异常)的时候就会直接跳过第六行去执行第8行的,而会被赋值给$e,Exception其实是一个类,系统定义好的一个类,可以通过调用Getmessage来获取第5行里面的“车子爆胎”这个数据。倘若没有throw new Exception的话,就会直接向下执行,说路况很好,进而不执行第9行的代码。

那么问题来了,怎么知道系统发生错误了呢???

思路:可以注册一个错误函数(00x2有讲到),然后使用if判断错误的类型。

案例:

<?php 
set_error_handler("myerrorfun");
function myerrorfun($type,$mess,$file,$line){
    if ($type == E_WARNING) {#如果错误类型出现了严重,那么抛出异常(也就是throw new Exception)
        throw new Exception("出现了严重的错误。{$mess},{$file},{$line}");
    }
}
function say($language){#定义一个say函数
    echo $language;#直接输出这个函数。
}
say();#故意错误的使用函数。
 ?>

结果爆出如下错误:

( ! ) Fatal error: Uncaught exception \'Exception\' with message \'出现了严重的错误。Missing argument 1 for say(), called in D:\\wamp\\www\\test.php on line 11 and defined,D:\\wamp\\www\\test.php,8\' in D:\\wamp\\www\\test.php on line 5
( ! ) Exception: 出现了严重的错误。Missing argument 1 for say(), called in D:\\wamp\\www\\test.php on line 11 and defined,D:\\wamp\\www\\test.php,8 in D:\\wamp\\www\\test.php on line 5

那么正确书写say函数的话就不会报错了。

<?php 
set_error_handler("myerrorfun");
function myerrorfun($type,$mess,$file,$line){
    if ($type == E_WARNING) {#如果错误类型出现了严重,那么抛出异常(也就是throw new Exception)
        throw new Exception("出现了严重的错误。{$mess},{$file},{$line}");
    }
}
function say($language){#定义一个say函数
    echo $language;#直接输出这个函数。
}
say("珍惜爱你的人,不要等失去才珍惜。我会一直爱着你。");#故意错误的使用函数。
 ?>

 


00x4 自定义异常类

前面学习到的Exception是系统早就有了的异常类,那么我们可不可以自定义异常类呢?答案无疑是肯定的。

<?php 
class MyException extends Exception{#必须要继承Exception否则无效。
    function say(){#定义一个解决方法的函数。
        echo "say函数的语法是:say(\'strting\')";
    }
}
echo "11111111111<br />";
try{
    echo "2222222222222<br />";
    throw new MyException("语法错误。");#抛出语法错误调用catch
    echo "3333333333333<br />";
}catch(Myexception $e){
    echo $e->getmessage()."<br />";#调用Myerrot类中的getmessage方法。
    echo $e->say()."<br />";#调用MyException类中的解决方法。
}
 ?>

00x5 多个异常处理

<?php 
$kaichu = "no";
class gowc_Exception extends Exception{#创建一个gowc_Exception的类并且继承父类Exception
    function solve(){#建立一个解决方法的方法(此知识点属于OOP,函数即方法,属性即变量)
        echo "该问题的解决方法:厕所坏了可以去公共车厕所。<br />";
    }
}
class chizaodian_Exception extends Exception{
    function solve(){
        echo "该问题的解决方法:你可以选择不吃早点。<br />";
    }
}
class qushangban_Exception extends Exception{
    function solve(){
        echo "该问题的解决方法:轮胎爆了赶紧换上备胎。<br />";
    }
}
class shangban_Exception extends Exception{
    function slove(){
        echo "重新找工作。";
    }
}




echo "早上起床<br />";
//-------------------------------------第一个错误-----------------
try{
    echo "起床去上厕所<br />";
    throw new gowc_Exception("马桶坏了。");#抛出一个gowc_Exception的异常类。
    echo "上完厕所,做下一件事情。<br />";#如果没有异常执行该行。
} catch(gowc_Exception $e){
    echo $e->getmessage();#如果有异常执行该行
    echo $e->solve();
}
//-------------------------------------第二个错误-----------------
try{
    echo "去吃早餐<br />";
    throw new chizaodian_Exception("早点已经卖完了。");
    echo "吃完早点准备开车去上班。";
}catch(chizaodian_Exception $e){
    echo $e->getmessage();
    echo $e->solve();
}
//-------------------------------------第三个没有错误-----------------
try{
    echo "开车去上班。<br />";
    echo "路况很好顺利到公司。<br>";
}catch(qushangban_Exception $e){
    echo $e->getmessage();
    echo $e->solve();
}
//-------------------------------------使用if判断---------------------
try{
    echo "开始工作。<br />";
    if($kaichu == "yes"){#判断是否被开除。如果是就抛出异常。否者就输出工作完成,
        throw new shangban_Exception("你被开除了");
    }
    echo "工作完成。";
}catch(shangban_Exception $e){
    echo $e->getmessage();
    echo $e->slove();
}
 ?>

输出效果如下所示:

 

 


THE END

以上是关于PHP报时区错误 ,不要说修改date.timezone="XXX" 都试过了不管用,centos6.3系统 php 5.4.15 mysql5.5的主要内容,如果未能解决你的问题,请参考以下文章

项目启动报时区异常

electron打包报时间戳不准确错误

IDEA连接MySQL------serverTimezone

每天电视和广播报时都说北京时间,哪为啥用于对时的铯原子钟为啥不放在北京?

每天电视和广播报时都说北京时间,哪为啥用于对时的铯原子钟为啥不放在北京

跟着百度学PHP[11]-PHP当中的异常处理