本文分析了在PHP y2k38漏洞的解决方案。分享给你供你参考。具体分析如下:

y2k38,也称为UNIX的千年虫,会影响所有32位系统的PHP与Unix时间戳的整数来记录时间,和其他编程语言。

一个整数变量被保存下来的最大的时间是在2038年1月19日03:14:07。之后,整数溢出。

01在01个月的1970,世界的标准是在2 ^ 31 - 1在03:14:07点在星期二,01,19.2 ^ 31 - 1是0x7fffffff和被认为是由许多程序员看到的,在32位系统中,这是最大的有符号整数,如果它是用来表示秒数,大约是68.1年,从1970到2038这个数。

32位系统显示,2038年1月19日03:14:07日期后会溢出。


< PHP
$date ='2040-01-01 12:00:00';
回声strtotime($日); / /空溢出
回声号('y-m-d H:我:S,strtotime($日)); / / 1970-01-01 00:00:00
>




64位系统会受到影响吗

在理论上,强烈建议进行一次测试。64位系统最远的保存日期是宇宙现在的21到292亿年。

在32位机,DateTime类可以用来解决这个问题。(php5.2开始引入这类和扩展版本5.3中的一些方法)

代码如下:


< PHP
美元= '2040-01-01 12:00:00的日期;
DT =新的DateTime美元($日);
echo DT—>格式(U); / / 2209032000
echo DT ->格式('y-m-d H:我:'); / / 2040-01-01 12:00:00
>




希望本文能对PHP程序设计的研究有所帮助。