php中Y2K38的漏洞解决方法实例分析


Posted in PHP onSeptember 22, 2014

本文实例分析了php中Y2K38漏洞的解决方法。分享给大家供大家参考。具体分析如下:

Y2K38,又称 Unix Millennium Bug, 此漏洞将会影响到所有 32 位系统下用 UNIX 时间戳整数来记录时间的 PHP,及其它编程语言。

一个整型的变量所能保存的最大时间为 2038 年 1 月 19 日 03:14:07。超过这个时间后,整型数值将会溢出。

从 1970 年 01 月 01 日开始,到世界标准时 2038 年 01 月 19 日星期二凌晨 03:14:07 超过 2^31 ? 1。2^31 ? 1 就是 0x7FFFFFFF,相信很多编程员都看过,在 32 位系统里,这表示最大的有符号整数。如果用它来表示秒数,大概相当于 68.1 年,从 1970 年到 2038 年刚好是这个数。

32位系统下显示2038年1月19日03:14:07以后的日期将会溢出。

<?php
$date = '2040-01-01 12:00:00';
echo strtotime($date);           // 空 溢出
echo date('Y-m-d H:i:s', strtotime($date)); // 1970-01-01 00:00:00
?>

那么64 位系统会受到影响吗?

理论上不会,强烈建议进行一下测试。64 位系统下可以保存的日期最远日期是现在宇宙年龄的 21 倍~ 292 亿年。

在32位机器上,可以使用DateTime类来解决这个问题。(PHP5.2开始引入这个类,并在5.3版本中扩展了一些方法)

代码如下:

<?php
$date = '2040-01-01 12:00:00';
$dt = new DateTime($date);
echo $dt->format('U');      // 2209032000
echo $dt->format('Y-m-d H:i:s'); // 2040-01-01 12:00:00 
?>

希望本文所述对大家PHP程序设计的学习有所帮助。

PHP 相关文章推荐
php日历[测试通过]
Mar 27 PHP
用mysql内存表来代替php session的类
Feb 01 PHP
PHP用mysql数据库存储session的代码
Mar 05 PHP
基于PHP常用字符串的总结(待续)
Jun 07 PHP
php防止伪造的数据从URL提交方法
Jun 27 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
Yii中实现处理前后台登录的新方法
Dec 28 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
thinkPHP框架整合tcpdf插件操作示例
Aug 07 PHP
PHP工厂模式的日常使用
Mar 20 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
Sep 29 PHP
使用laravel的migrate创建数据表的方法
Sep 30 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
Sep 22 #PHP
PHP中常用的输出函数总结
Sep 22 #PHP
C#静态方法与非静态方法实例分析
Sep 22 #PHP
php操作csv文件代码实例汇总
Sep 22 #PHP
PHP提示Cannot modify header information - headers already sent by解决方法
Sep 22 #PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 #PHP
PHP中exec与system用法区别分析
Sep 22 #PHP
You might like
再说下636单管机
2021/03/02 无线电
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
2011/07/03 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
PHP图片上传代码
2013/11/04 PHP
PHP微信支付实例解析
2016/07/22 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
javascript全局变量封装模块实现代码
2012/11/28 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
JS实现新建文件夹功能
2017/06/17 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
Python实现批量下载图片的方法
2015/07/08 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
2020/02/28 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
python 数据类型强制转换的总结
2021/01/25 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
应届生妇产科护士求职信
2013/10/27 职场文书
四好少年事迹材料
2014/01/12 职场文书
小学运动会班级口号
2014/06/09 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
小学生反邪教心得体会
2016/01/15 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
Python机器学习之底层实现KNN
2021/06/20 Python
MySQL快速插入一亿测试数据
2021/06/23 MySQL