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 相关文章推荐
VML绘图板②脚本--VMLgraph.js、XMLtool.js
Oct 09 PHP
关于PHP中操作MySQL数据库的一些要注意的问题
Oct 09 PHP
用ODBC的分页显示
Oct 09 PHP
php XPath对XML文件查找及修改实现代码
Jul 27 PHP
PHP获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
php+mysql数据库实现无限分类的方法
Dec 12 PHP
PHP的几个常用加密函数
Feb 03 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
PHP基于curl模拟post提交json数据示例
Jun 22 PHP
PHP获取星期几的常用方法小结
Dec 18 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
Sep 18 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
May 02 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
日本十大惊悚动漫
2020/03/04 日漫
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
轻松创建nodejs服务器(2):nodejs服务器的构成分析
2014/12/18 NodeJs
JavaScript中的继承方式详解
2015/02/11 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
AngularJS指令用法详解
2016/11/02 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
JS对象深度克隆实例分析
2017/03/16 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
[01:07]2015国际邀请赛 中国区预选赛精彩回顾
2015/06/15 DOTA
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
python用什么编辑器进行项目开发
2020/06/17 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
Html5应用程序缓存(Cache manifest)
2018/06/04 HTML / CSS
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
Shell编程面试题
2012/05/30 面试题
房地产管理毕业生自荐信
2013/11/04 职场文书
教师评优事迹材料
2014/01/10 职场文书
毕业生求职信的经典写法
2014/01/31 职场文书
信电学院毕业生自荐书
2014/05/24 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js