php date函数出现时区警告时的解决方法

 更新时间:2016年11月25日 16:34  点击:1477
php date函数报错 PHP Warning: date() [function.date]: It is not safe就是php.ini中date.timezone未设置好所导致了,解决办法可以在页面也可以在php.ini中处理,具体如下

测试

echo date();

报错

PHP Warning: date() [function.date]: It is not safe ....

解决办法

方法一

修改php.ini。

打开php5.ini查找date.timezone 去掉前面的分号 = 后面加XXX,重启http服务(如apache2或iis等)即可。

date.timezone = Asia/Chongqing

方法二

在页头使用 date_default_timezone_set()设置

date_default_timezone_set('PRC'); //东八时区
echo date('Y-m-d H:i:s');

对于开发人员估计都知道使用PHP Excel类读取和生成excel文件是非常的简单的了,下文我就来为各位介绍几个例子.

 使用PHP来生成Excel的方法有很多,比如使用最简单的回车符,制表符来生成,或者直接使用html的table格式,但这些方式兼容性都有所欠缺。测试了一下PHPExce类,发现太l强大了,可以输出非常复杂的excel表格,另外说一下还可以读取Excel文件。闲话少说,放出简要代码:


<?php
require_once './Classes/PHPExcel.php';  

$objExcel = new PHPExcel();  
$objWriter = new PHPExcel_Writer_Excel5($objExcel);     // 用于其他版本格式  
$objExcel->setActiveSheetIndex(0);  
$objActSheet = $objExcel->getActiveSheet();  
//设置当前活动sheet的名称  

$objActSheet->setTitle('sheet1');  

$objActSheet->setCellValue('A2', '中国11');  // 设置Excel中的内容  A2表示坐标

//生成excel到文件  
//$objWriter->save('./test.xls');  
//或者直接浏览器下载   (任选其一)
$outputFileName = "output.xls";
header("Content-Type:application/octet-stream;charset=utf-8");
header('Content-Disposition: attachment; filename=' . $outputFileName);
$objWriter->save('php://output');
?>
另外还可以读取Excel文件,示例代码
<?php
$xlsPath = './test.xls'; //指定要读取的exls路径
//$type = 'Excel2007'; //设置要解析的Excel类型 Excel5(2003或以下版本)或Excel2007
$type = 'Excel5';
//引入excel类
include 'Classes/PHPExcel.php';           
include 'Classes/PHPExcel/IOFactory.php';
$xlsReader = PHPExcel_IOFactory::createReader($type); 
$xlsReader->setReadDataOnly(true);
$xlsReader->setLoadSheetsOnly(true);
$Sheets = $xlsReader->load($xlsPath);
//开始读取
$Sheet = $Sheets->getSheet(0)->toArray(); //读取第一个工作表(注意编号从0开始) 如果读取多个可以做一个循环0,1,2,3....

//得到二维数组,每个小数组是excel表格内容的一行 里面包含此行的每列的数据 
echo '<pre>';
print_r($Sheet);
?>

mysql数据库或数据只给专业人士看了,如果我们要做数据报表这种就需要转换成excel文件了,下面我们来看一个简单的由PHP导出MySQL数据到Excel的方法

经常会碰到需要从数据库中导出数据到Excel文件,用一些开源的类库,比如 PHPExcel,确实比较容易实现,但对大量数据的支持很不好,很容易到达PHP内存使用上限。这里的方法是利用fputcsv写CSV文件的方法,直接向浏览器输出Excel文件。

<?php
// 输出Excel文件头,可把user.csv换成你要的文件名
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename=&quot;user.csv&quot;');
header('Cache-Control: max-age=0');</p>

<p>// 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可
$sql = 'select * from tbl where ……';
$stmt = $db-&gt;query($sql);</p>

<p>// 打开PHP文件句柄,php://output 表示直接输出到浏览器
$fp = fopen('php://output', 'a');</p>

<p>// 输出Excel列名信息
$head = array('姓名', '性别', '年龄', 'Email', '电话', '……');
foreach ($head as $i =&gt; $v) {
    // CSV的Excel支持GBK编码,一定要转换,否则乱码
    $head[$i] = iconv('utf-8', 'gbk', $v);
}</p>

<p>// 将数据通过fputcsv写到文件句柄
fputcsv($fp, $head);</p>

<p>// 计数器
$cnt = 0;
// 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
$limit = 100000;</p>

<p>// 逐行取出数据,不浪费内存
while ($row = $stmt-&gt;fetch(Zend<em>Db::FETCH</em>NUM)) {</p>

<pre><code>$cnt ++;
if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题
    ob_flush();
    flush();
    $cnt = 0;
}

foreach ($row as $i =&amp;gt; $v) {
    $row[$i] = iconv('utf-8', 'gbk', $v);
}
fputcsv($fp, $row);
</code></pre>

<p>}

简单易用,非常节省内存,不依赖第三方类库。

Mysql Native驱动(Mysql Native Driver 简称:mysqlnd )在PHP5.3.0版本中被引入。PHP5.4之后的版本mysqlnd被作为默认配置选项,下面我们就一起来看看mysqlnd驱动的例子吧.

我的PHP环境是5.4,使用mysql时突然出现以下错误:

mysql_connect(): Headers and client library minor version mismatch. Headers:50508 Library:50166

索性换成mysqlnd扩展,下面简单介绍mysqlnd:


mysqlnd(MySQL native driver for PHP)是php5.3后php自带的mysql驱动,官方推荐使用,优势如下:
A.libmysql驱动是由mysql AB公司(现在是oracle公司)编写, 并按mysql license许可协议发布,所以在PHP中默认是被禁用的.

而mysqlnd是由php官方开发的驱动,以php license许可协议发布,故就规避了许可协议和版权的问题

B.因为mysqlnd内置于PHP源代码,故你在编译安装php时就不需要预先安装mysql server也可以提供mysql client API (mysql_connect, pdo , mysqli), 这将减化一些工作量.

C. mysqlnd是专门为php优化编写的驱动,它使用了PHP本身的特性,在内存管理,性能上比libmysql更有优势. php官方的测试是:libmysql将每条记录在内存中保存了两份,而mysqlnd只保存了一份

D. 一些新的或增强的功能

增强的持久连接

引入特有的函数mysqli_fetch_all()

引入一些性能统计函数 mysqli_get_cache_stats(), mysqli_get_client_stats(),

mysqli_get_connection_stats(),

使用上述函数,可很容易分析mysql查询的性能瓶颈!

SSL支持(从php 5.3.3开始有效)

压缩协议支持

命名管道支持(php 5.4.0开始有效)

如何使用mysqlnd驱动?
传统的编译php时带如下参数:
--with-mysql=/usr/local/mysql

--with-pdo-mysql=/usr/local/mysql

查看编译参数:


[root@localhost php54]#./configure --help | grep mysql
  --with-mysql=DIR      Include MySQL support.  DIR is the MySQL base
                          mysqlnd the MySQL native driver will be used
  --with-mysql-sock=SOCKPATH   MySQL/MySQLi/PDO_MYSQL: Location of the MySQL unix socket pointer.
  --with-mysqli=FILE    Include MySQLi support.  FILE is the path
                          to mysql_config.  If no value or mysqlnd is passed
  --enable-embedded-mysqli  MYSQLi: Enable embedded support
  --with-pdo-mysql=DIR    PDO: MySQL support. DIR is the MySQL base directory
                                 If no value or mysqlnd is passed as DIR, the
  --enable-mysqlnd        Enable mysqlnd explicitly, will be done implicitly
  --disable-mysqlnd-compression-support
                            Disable support for the MySQL compressed protocol in mysqlnd
  --with-zlib-dir=DIR       mysqlnd: Set the path to libz install prefix

可以看到只要不指定,默认就是mysqlnd。于是重新编译PHP:


./configure --prefix=/usr/local/php54 --with-config-file-path=/usr/local/php54/etc --with-zlib --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --with-curl --with-curlwrappers --enable-fpm --with-mcrypt --with-gd --with-openssl --with-mhash --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc -enable-zip --enable-soap--with-mysql --with-pdo-mysql --with-mysqli

对于获得最后插入数据的记录ID号我们通常会用到mysql_insert_id()或select max(id)来操作了,下面一起来看看小编对于这两个函数的一些理解。

这个问题以前绝壁遇到过,太久没写不记得(貌似当时是CI框架直接有相关函数的),然后这次又遇到了,再次滚去查了一下,这里说的并非是PDO之类的情况,而是用过时的连接和执行方式之后怎么进行操作。

有什么SQL语句实现的,但明显不合适,当收到多人操作时,顿时就混乱不堪。

所以在此,用mysql_insert_id()函数搞定,他会返回AUTO_INCRESEMENT的值。

 代码如下 复制代码

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');

mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d ", mysql_insert_id());
?>

刚开始我还在想这个函数不会遇到相同的问题么,然后小新告诉我是基于当前数据库连接的,顿时不怕不怕啦。

当然还有

 代码如下 复制代码

mysql_query("select max(id) from t1",$link);

当然,现在这种连接方式已经out的可以了,


这里也有说明:

Warning

This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:

mysqli_insert_id()
PDO::lastInsertId()

[!--infotagslink--]

相关文章

  • 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
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • Python astype(np.float)函数使用方法解析

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

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

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

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • 总结android studio注意事项及打不开等问题解决方法

    经过一段时间的使用,总结了android studio打不开等问题的6种解决方法及android studio注意事项,希望对大家有所帮助。 1 首次运行,建立好项目需要下载一些东西,如果...2016-09-20
  • PHP函数strip_tags的一个bug浅析

    PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31