PHP 使用date()函数提示Warning: date()错误

 更新时间:2016年11月25日 16:46  点击:1839
今天发现在php5.4使用date函数时提示PHP Warning: date() [function.date]: It is not safe to rely on the system’s timezone错误,但在php5.2中没有任何问题啊,那是怎么一回事呢?

在用PHP5.3以上的PHP版本时,只要是涉及时间的会报一个
“PHP Warning: date() [function.date]: 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 ‘UTC’ for ’8.0/no DST’ instead in”
这样的错。如何解决呢
 
实际上,从 PHP 5.1.0 ,当对使用date()等函数时,如果timezone设置不正确,在每一次调用时间函数时,都会
产生E_NOTICE 或者 E_WARNING 信息。而又在php5.1.0中,date.timezone这个选项,默认情况下是关闭的,无
论用什么php命令都是格林威治标准时间,但是PHP5.3中好像如果没有设置也会强行抛出了这个错误的,解决此问
题,只要本地化一下,就行了。
以下是三种方法(任选一种都行):
一、在页头使用date_default_timezone_set()设置 date_default_timezone_set(‘PRC’); //东八时区 echo
date(‘Y-m-d H:i:s’);
 
二、在页头使用 ini_set(‘date.timezone’,'Asia/Shanghai’);
 
三、修改php.ini。打开php5.ini查找date.timezone 去掉前面的分号修改成为:date.timezone =PRC
重启http服务(如apache2或iis等)即可。
XXX可以任意正确的值。对于我们国内来说:可以为以下值:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi
(依次为重庆,上海,乌鲁木齐)港台地区可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次为澳门
,香港,台北),还有新加坡:Asia/Singapore,当然PRC也行。

总结,原来在php5.3之前的版本对日期没有严格的限制所以就是我日期设置不正确也没有问题,但在php5.3之后就不行了哦。

PHP CLI模式开发不需要任何一种Web服务器(包括Apache或MS IIS等),这样,CLI可以运行在各种场合,下面我就来简单的介绍一下php cli命令的用法。

PHP CLI(命令行模式下)接受参数有多种方法:

(1)使用$argv接受参数

<?php
 

 代码如下 复制代码
//变量仅在 register_argc_argv 打开时可用。
print_r($argc); //CLI下获取参数的数目,最小值为1
print_r($argv); //CLI下传递给脚本的参数数组,第一个参数总是当前脚本的文件名,因此 $argv[0] 就是脚本文件名。


 结果:

 

PHP中CLI命令行模式接受参数的方法


PHP CLI下接受参数的几种方法(2)使用getopt()函数获取参数

<?php
 

 代码如下 复制代码
//获取 -a -b -c参数
$args = getopt('a:b:c:');
print_r($args);


执行结果:

PHP中CLI命令行模式接受参数的方法


使用getopt获取cli参数

本文章介绍的call_user_func是PHP的内置函数,该函数允许用户调用直接写的函数并传入一定的参数,而call_user_func_array用一个数组作为参数调用一个回调函数 返回值为回调函数执行的结果或者为false,要传递参数给函数,作为一个索引数组。

call_user_func() 函数类似于一种特别的调用函数的方法,使用方法如下:

 代码如下 复制代码

 
function test($a, $b) {
    echo $a*$b;
}
call_user_func('test', 4, 5);
//---- echo 20 ----//

函数第一个参数为用户自定义函数,第二个参数为自定义函数中的参数。

调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也是满有新意的:

 

 代码如下 复制代码

class test {
    function demo($param) {
        echo $param;
    }
}
call_user_func(array("test", "demo"), "this is output result!");
//--- echo this is output result! ---//

call_user_func_array()函数和call_user_func()很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰:

 

 代码如下 复制代码

function test($b, $c) {
    echo $b;
    echo $c;
}
call_user_func_array('test', array("a", "b"));
//------echo ab ---------//

call_user_func_array()函数也可以调用类内部的方法的

 

 代码如下 复制代码

class class_demo {
    function fun_demo($param1, $param2) {
        echo $param1 + $param2;
    }
}
call_user_func_array(array('class_demo', 'fun_demo'), array("1", "2"));
//---- echo 3 -----//

这里只是说了函数的使用方法。具体的事例可以在网上找找。

 代码如下 复制代码

<?php
function debug($var, $val)
{
    echo "***DEBUGGINGnVARIABLE: $varnVALUE:";
    if (is_array($val) || is_object($val) || is_resource($val)) {
        print_r($val);
    } else {
        echo "n$valn";
    }
    echo "***n";
}

$c = mysql_connect();
$host = $_SERVER["SERVER_NAME"];

call_user_func_array('debug', array("host", $host));
call_user_func_array('debug', array("c", $c));
call_user_func_array('debug', array("_POST", $_POST));
?>

在PHP利用Header函数跳转时需会碰到一些无法跳转的问题,这里一聚教程小编总结了常见的三种导致无法跳转的例子与解决方法给各位,希望此例子对大家带来帮助。

在通过php的header('Location:http://www.111cn.net')做跳转时.有时会不成功.追其原因有以下几种情况:

写法错误

•location和“:”号间不能有空格,否则会出错。

•在用header()前不能有任何的输出。

•header后的PHP代码还会被执行,所以在函数之前最好加上exit()来停止之后程序的执行

另外还有一个问题,算是比较低级了


编码报错

 代码如下 复制代码

<?php
 header("location:http://www.111cn.net/");
?>

要求header前没有任何输出,否则会报错。

当我们以 ANSI 格式编码时(多数默认情况),可以正常实现PHP跳转。

 代码如下 复制代码
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

有时我们需要在网页中事先判断跳转条件,如果符合则正常显示网页,而网页是以 UTF-8 格式编码,此时使用header则会报错。
原因是 UTF-8 编码在文本开始处偷偷地输出了三个字符(BOM),默认对我们不可见。因此不满足“header前没有任何输出”的条件,从而报错。

 
解决方法是使用Notepad++等文本编辑器打开文件,转为 UTF-8 无 BOM 编码格式,保存退出即可。

PHP header 默认302临时重定向,如需要使用301永久重定向,可使用以下代码。

 代码如下 复制代码
<?php
 header("HTTP/1.1 301 Moved Permanently");
 header("Location: http://feitsui.net/");
?>

如果不关注HTTP状态,可以使用JavaScript实现跳转。

 代码如下 复制代码

<script type="text/javascript">
 window.location.href="http://www.111cn.net/";
</script>

三,顺序问题

 代码如下 复制代码

<?php
if(1){
    header("Location:http://www.baidu.com/");
}
    header("Location:01.php");
    header("Location:03.php");
    header("Location:http://www.sina.com");
    echo "111";
    header("Location:http://www.g.cn");
    echo "222";
    header("Location:http://www.163.cn");
    echo "333";
?>

如上代码为什么不跳转到header("Location:http://www.baidu.com/");?

另外一个问题服务器读PHP文件,是读一点发送给客户端一点,还是一次读完后,才发送给客户.Javascript是怎么个读法?

 php脚本是从上往下是顺序读的,在服务器端一次性读完以后发给客户端,这个文件,当读到if时本应该发送header("Location:http://www.baidu.com/");但是下面还有header("Location:01.php");
header("Location:03.php");
header("Location:http://www.sina.com");就会继续读到最后一条而echo的优先级低于低于header,当很多个header并列时就会把最后一条显示,就像显示数组一样,$forum[],当你写 echo $forum就只会把数组中的最后一条记录显示。javascript是客户端脚本,当你的页面下载后以后所有的javascript脚本文件就已经在你的电脑里面了,只有对其操作时才会有响应。

sprintf()函数在php官方是说把字符串格式化输出了,下面我就来给各位朋友介绍一站长在学习sprintf()函数时的一些经验分享,希望此文章能给你带来帮助。


PHP函数 sprintf() 函数官方定义为:sprintf() :把格式式的字符串写入一个变量中

语法为:
sprintf(format,arg1,arg2,arg++);

参数:
format:必须,转换格式
arg1 :必须,规定插入 format 字符串中第一个%符号处的参数
arg1 :可选,规定插入 format 字符串中第二个%符号处的参数
arg1++:可选,规定插入 format 字符串中第三、四等%符号处的参数

参数 format 的转换格式,以百分比符号(%)开始到转换字符结束,下面是有可能的format值

%% – 返回百分比符号
%b – 二进制数
%c – 依照 ASCII 值的字符
%d – 带符号十进制数
%e – 可续计数法(比如 1.5e+3)
%u – 无符号十进制数
%f – 浮点数(local settings aware)
%F – 浮点数(not local settings aware)
%o – 八进制数
%s – 字符串
%x – 十六进制数(小写字母)
%X – 十六进制数(大写字母)

下面是一些demo:

 代码如下 复制代码
 
// 1. %% :把 %% 替换成 %
$str = '测试一下 %% 这个参数,会被替换成什么';
echo sprintf($str);
//返回结果: 测试一下 % 这个参数,会被替换成什么(%%被替换成一个%)
 
 
// 2. %b :该参数只能替换整型数据,如果是浮点型,只会取整数部分,会忽略小数点后面的数据。如果是非整型数据。www.111Cn.net返回 0
$str = '参数 %b 会替换成二进制数';
$arg = '10';
echo sprintf($str,$arg);
//返回结果:参数 1010 会替换成二进制数
$arg = 10.23;
echo sprintf($str,$arg);
//返回结果:参数 1010 会替换成二进制数
$arg = 'abc';
echo sprintf($str,$arg);
//返回结果:参数 0 会替换成二进制数
 
// 3. %c 返回字符编码的ASCII码
$arg = 65;
$str =  "数字 {$arg} 对应的ASCII码为 %c ";
echo sprintf($str,$arg);
//返回结果:数字 65 对应的ASCII码为 A
 
// 4. %d 将一段字符里的%d替换成int型,数据要求同 $b 相同
$str = 'ID号为 %d ';
$arg = -3;
echo sprintf($str,$arg);
//返回结果:ID号为 -3
$arg = 4.5;
echo sprintf($str,$arg);
//返回结果:ID号为 4
$arg = 'abc';
echo sprintf($str,$arg);
// www.111Cn.net返回结果:ID号为 0
 
// 5. %s - 字符串
$str = "这是用来测试的sprintf的字符串( %s )。今天消费了%f元。从钟楼到小寨有%d站。上班";
$arg = '%s';
echo sprintf($str,$arg,6,5);
//返回结果:这是用来测试的sprintf的字符串( %s )。今天消费了6.000000元。从钟楼到小寨有5站。上班

至于其它的参数。大家可以试着测试一下.

下面说一下这个函数的一些用途。比如我们在对一张数据表所有数据做多个字段更新时。如果使用循环更新的话。那是很耗费资源的。这里就要用到我们sprintf()函数了。
在数据库批量更新时。我一般采用 case then when end 的语法来做。基本语法如:

 代码如下 复制代码
 
UPDATA table
    SET field = CASE id
        WHEN 1 THEN 'value1'
        WHEN 2 THEN 'value2'
        WHEN 3 THEN 'value3'
    END
WHERE id IN (1,2,3)

上面的意思就是说。更新 table 设置 id = 1 的值为 value1, id = 2 的值为 value2 , id = 3 的值为 value3 .这样参数上面的函数将sql语句结合成这样SQL语句。只需一条SQL就可以进行批量更新。具体的方法为:
 

 代码如下 复制代码
//比如 id 对应的值为以下数组
$info = array(1=>'张三',2=>'李四',3=>'王五');
$ids = implode(',',array_keys($info)) //获取所有的ID字符串
//组合SQL
$sql = "UPDATA user SET username = CASE id";
foreach($info as $id=>$username){
     $sql .= sprintf("WHEN %d THEN %s",$id,$username);
}
$sql .= "END WHERE id IN ($ids)";
// $model->query($sql)

上面就可以完成批量更新的操作。后面的 where子句确保只有3行数据执行

[!--infotagslink--]

相关文章

  • Ecshop提示Only variables should be passed by reference in错误

    在安装好ecshop软件之后我们打开首页时提示Only variables should be passed by reference in错误了,碰到这个问题是什么原因呢?下面我们就一起来看看解决办法吧。...2016-11-25
  • 409错误是什么 http 409错误怎么解决

    409错误是什么?http 409错误怎么解决呢?不少站长在遇到这个错误代码之后都一筹莫展,本次一聚教程网为大家带来了详细的说明,快来看看吧。 409错误是什么: HTTP 40...2017-01-22
  • 414错误是什么 414错误怎么解决

    414错误是HTTP协议状态码中的一种,很多都还不知道414错误是什么,以及不知道怎么解决414错误,那么就来看看小编带来的介绍吧。 414错误是什么: HTTP 414错误,(Requ...2017-01-22
  • http 405错误是什么 http 405错误怎么解决

    http 405错误是什么?http 405错误怎么解决?相信很多站长都在找这两个问题的答案,本次小编为大家带来了详细的教程,快来看看吧。 405错误是什么: HTTP 405错误是H...2017-01-22
  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • 401错误码代表什么 401错误解决办法

    401是HTTP状态码的一种,属于“请示错误”,表示请求可能出错,已妨碍了服务器对请求的处理。具体的401错误是指:未授权,请求要求进行身份验证。登录后,服务器可能会返回对页面...2017-01-22
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • http 402错误是什么 http 402简介

    http 402错误是什么?402错误较为少见,一般不轻易出现,下面小编就来告诉大家402错误是什么吧。 HTTP 402错误是HTTP状态码的一种,表示“要求付费”; 所求的...2017-01-22
  • 411错误是什么 411错误怎么解决

    411错误是HTTP协议状态码的一种,很多人都还不知道411错误是什么,本次一聚教程网将为大家进行解答,并且告诉大家411错误怎么解决。 411错误是什么: HTTP 411错误,(Lengt...2017-01-22
  • apache网站提示503错误解决办法

    Apache status 503 的原因大致有如下几种情况 : 1、 CPU 负载过高,服务器响应不过来,返回503 2、 系统连接数超限,超过MaxVhostClients的上限,返回503 3、 单IP连接数超限,超过M...2016-01-28
  • 404错误是什么 404错误怎么解决

    403错误是网站访问过程中,常见的错误提示。资源不可用,服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致,比如IIS或者apache设置了访问权限...2017-01-22
  • 403错误是什么 403错误怎么解决

    403错误是HTTP状态码的一种,属于“请示错误”,表示服务器拒绝请求。如果在搜索引擎尝试抓取您网站上的有效网页时显示此状态代码,那么,这可能是您的服务器或主机拒绝搜索...2017-01-22
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • 412错误是什么 412错误怎么解决

    412错误是什么?412错误怎么解决?本次一聚教程网将为大家带来详细的介绍,帮助大家全面了解412错误的意思以及解决412错误的方法。 412错误是什么: HTTP 412错误,(Precond...2017-01-22
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • 406错误是什么 406错误怎么解决

    HTTP 406错误是HTTP协议状态码的一种,表示无法使用请求的内容特性来响应请求的网页。一般是指客户端浏览器不接受所请求页面的 MIME 类型。 而MIME类型是在把输出...2017-01-22
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 407错误是什么 407错误怎么解决

    407错误是什么?407错误怎么解决?不少站长都遇到过407错误,下面小编将告诉大家如何处理407错误。 407错误是什么: HTTP 407错误是HTTP协议状态码的一种,表示需要代...2017-01-22