php中Y2K38的漏洞解决方法实例分析_php技巧_脚本之家伟德betvictot手机版

本文实例深入分析了php中Y2K38疏漏的缓慢解决措施。分享给我们供大家参谋。具体深入分析如下:

前言

Y2K38,又称 Unix Millennium Bug, 此漏洞将会潜濡默化到全体 32 位系统下用
UNIX 时间戳整数来记录时间的 PHP,及任何编制程序语言。

近年在写一个品类接口。测量检验中开掘服务器上测量试验平常的意义,在该地一贯有标题。一步步的每个核查,最后锁定难题是由于函数strtotime回来了一个false值,导致数据插入数据库战败。

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

长期以来代码运转结果不近似,原因那正是处境不风姿洒脱致引致。要么是PHP版本分化,要么是位数差异。

从 1967 年 01 月 01 日带头,到世界标准时 2038 年 01 月 19 日礼拜风度翩翩黎明先生03:14:07 超过 2^31 – 1。2^31 – 1 正是0x7FFFFFFF,相信广大编制程序员都看过,在 叁11位系统里,这意味最大的有号子整数。假设用它来代表秒数,大致也便是 68.1
年,从 一九七〇 年到 2038 年无独有偶是以此数。

自己计算机是陆十人的。这里是PHP位数不平等,服务器使用61位,而自个儿本地是三12位。而strtotime被流传了叁个字符串2050-1-1 23:59:59,该参数大于了2038-1-19 03:14:07故而在33人PHP下直接重回false,而陆拾伍位PHP不受影响。

叁九位系统下显得2038年三月12日03:14:07自此的日子将会溢出。

Y2K38漏洞

那正是说64 位系统会晤对震慑呢?

招致上述难题的根本原因便是Y2K38漏洞,也被称之为Unix Millennium Bug

商酌上不会,猛烈提出举行一下测量试验。63个人系统下得以保留的日期最远日期是今日宇宙岁数的 21 倍~ 292 亿年。

三10个人系统或PHP

在三贰十二个人机器上,能够应用DateTime类来解决那几个难题。(PHP5.2开端引进这些类,并在5.3本子中扩大了一些主意)

此漏洞将会默化潜移到具有 32 位系统下用UNIX 时间戳整数来记录时间的
PHP,及其他编制程序语言。叁个整型的变量所能保存的最大时间为
2038 年01月19 日 03:14:07。超过那几个时辰后,整型数值将会溢出。

format; // 2209032000echo $dt->format; // 2040-01-01 12:00:00 ?>

62位系统或PHP

仰望本文所述对大家PHP程序设计的读书抱有助于。

61人系统下能够保留的日子最远日期是几日前宇宙岁数的21倍——292亿年。所以不会蒙受该漏洞影响。

如何检查实验

何以明白您的连串是不是选用该漏洞的影响。很简短,直接行使strtotime去更改三个高于2038年1月19日03:14:07日期。大概选用date函数将二个胜出2147454847时间戳调换为日期。

方法一

echo date("Y-m-d H:i:s",2556115199); 

上面结果风流倜傥旦回到2050-12-31 23:59:59那么就一贯不难点。假设回去壹玖壹肆-11-25
09:31:43那么就受收到影响。

方法二

var_dump(strtotime("2050-12-31 23:59:59"));

上面结果风流浪漫旦回到2556115199那么就家常便饭。如若回到false那正是说也会惨被震慑。

实施方案

方案一

更换系统和PHP均为六十八位。那一个代价超级大,可是足以恒久解决难题。

方案二

PHP5.2版本之后提供了叁个函数DateTime能够不常消灭一下问题。

// 1、日期字符串转换为时间戳$obj = new DateTime("2050-12-31 23:59:59");echo $obj->format; // 2556115199// 2、时间戳转换为日期字符串$obj = new DateTime; // 这里时间戳前要写一个@符号$timezone = timezone_open; // 设置时区$obj->setTimezone; echo $obj->format; // 2050-12-31 23:59:59// 而且DateTime还可以有其他玩法$obj = new DateTime("2050-12-31 23:59:59");echo $obj->format; // 换种方式输入时间字符串2050/12/31 23:59:59

通过DateTime类来操作日期不会惨被Y2K38漏洞的熏陶,能够最远协理到9999年12月31日

总结

如上就是那篇小说的全部内容了,希望本文的内容对我们的上学或然干活能拉动一定的提携,假如有疑点大家能够留言调换,谢谢我们对剧本之家的支撑。

发表评论