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 相关文章推荐
站长助手-网站web在线管理程序 v1.0 下载
May 12 PHP
php 中文和编码判断代码
May 16 PHP
php模板原理讲解
Nov 13 PHP
php分页代码学习示例分享
Feb 20 PHP
PHP实现的json类实例
Jul 28 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
Sep 22 PHP
apache php mysql开发环境安装教程
Jul 28 PHP
php微信公众账号开发之前五个坑(一)
Sep 18 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
YII框架http缓存操作示例
Apr 29 PHP
php抽象方法和普通方法的区别点总结
Oct 13 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中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
javascript利用初始化数据装配模版的实现代码
2010/11/17 Javascript
input按钮的事件处理大全
2010/12/10 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
解决vant的Toast组件时提示not defined的问题
2020/11/11 Javascript
[55:18]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python 输出一个两行字符的变量
2009/02/05 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
Python实现的简单计算器功能详解
2018/08/25 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
2019/06/27 Python
使用python实现飞机大战游戏
2020/03/23 Python
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
自动化系在校本科生求职信
2013/10/23 职场文书
军神教学反思
2014/02/04 职场文书
人事部经理岗位职责
2014/03/07 职场文书
2015年班主任德育工作总结
2015/05/21 职场文书
2016春季运动会通讯稿
2015/07/18 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
一文搞懂redux在react中的初步用法
2021/06/09 Javascript
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL