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核心代码分析require和include的区别
Jan 02 PHP
PHP文件上传原理简单分析
May 29 PHP
PHP中的正则表达式函数介绍
Feb 27 PHP
php 中文字符串首字母的获取函数分享
Nov 04 PHP
php解析url的三个示例
Jan 20 PHP
ThinkPHP之import方法实例详解
Jun 20 PHP
php猴子选大王问题解决方法
May 12 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
php 获取文件行数的方法总结
Oct 11 PHP
深入讲解PHP的对象注入(Object Injection)
Mar 01 PHP
Laravel中的Auth模块详解
Aug 17 PHP
laravel config文件配置全局变量的例子
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实例分享之mysql数据备份
2014/05/19 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
JQuery 写的个性导航菜单
2009/12/24 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
用js的for循环获取radio选中的值
2013/10/21 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python妹子图简单爬虫实例
2015/07/07 Python
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
python 日志增量抓取实现方法
2018/04/28 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
监督检查工作方案
2014/05/28 职场文书
商业门面租房协议书
2014/11/25 职场文书
给上级领导的感谢信
2015/01/22 职场文书
2014年底个人工作总结
2015/03/10 职场文书
大学团日活动总结书
2015/05/11 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
pycharm代码删除恢复的方法
2021/06/26 Python
JS实现简单的九宫格抽奖
2022/06/28 Javascript