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 相关文章推荐
定制404错误页面,并发信给管理员的程序
Oct 09 PHP
PHP读取文件并可支持远程文件的代码分享
Oct 03 PHP
php daddslashes()和 saddslashes()有哪些区别分析
Oct 26 PHP
浅析get与post的一些特殊情况
Jul 28 PHP
php中数字、字符与对象判断函数用法实例
Nov 26 PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
Apr 08 PHP
PHP模拟QQ登录的方法
Jul 29 PHP
yii2实现分页,带搜索的分页功能示例
Jan 07 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
Nov 20 PHP
详细解读php的命名空间(二)
Feb 21 PHP
PHP实现的装箱算法示例
Jun 23 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
PHP邮件专题
2006/10/09 PHP
用php获取远程图片并把它保存到本地的代码
2008/04/07 PHP
PHP校验ISBN码的函数代码
2011/01/17 PHP
php设置静态内容缓存时间的方法
2014/12/01 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
javascript 函数式编程
2007/08/16 Javascript
JS的数组的扩展实例代码
2008/07/09 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
2015/03/05 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
jquery实现数字输入框
2017/02/22 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
Python实现的数据结构与算法之链表详解
2015/04/22 Python
python集合用法实例分析
2015/05/30 Python
python实现上传下载文件功能
2020/11/19 Python
Django自定义过滤器定义与用法示例
2018/03/22 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
Python语言快速上手学习方法
2018/12/14 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
Python简单实现区域生长方式
2020/01/16 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
外贸实习生自荐信范文
2013/11/24 职场文书
工商管理实习生自我鉴定范文
2013/12/18 职场文书
自强自立美德少年事迹材料
2014/08/16 职场文书
团员个人总结
2015/02/26 职场文书
出生证明格式
2015/06/15 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python
Python异常类型以及处理方法汇总
2021/06/05 Python
python神经网络 使用Keras构建RNN训练
2022/05/04 Python