2038年问题 php,php strtotime() mktime() 的2038年问题 Y2K38漏洞

Y2K38漏洞,也称为Unix Millennium Bug,主要影响32位系统下使用UNIX时间戳的PHP等编程语言。当时间超过2038年1月19日03:14:07时,整型溢出会导致时间错误。尽管64位系统理论上不受影响,但建议进行测试以确保安全。PHP从5.2版本开始引入DateTime类作为解决方法,避免整型溢出问题。对于依赖未来日期的系统,如金融应用,这个问题不容忽视。
摘要由CSDN通过智能技术生成

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

年刚好是这个数。

是的,这是 28

年以后的事情了。你们肯定有些人认为我是在忋人忧天。要知道世纪末的千年虫问题就是这样产生的。另外,我们在开发一些应用的时候,可能会用到未来的日期,比如一个

25 年期的长期存款,退休金和保险业的财务数据等。

64 位系统会受到影响吗?

理论上不会,如果你是在 64 位的操作系统下使用 PHP,你的程序应该不会受到影响。我强烈建议你进行一下测试。64

位系统下可以保存的日期最远日期是现在宇宙年龄的 21 倍~ 292 亿年。

如果你确认你的财务系统运行在 64 位系统上的话,你可以安稳的睡个大头觉了。

有其它的解决方法吗?

幸运的是,PHP 从 5.2 版本开始引入了一个 DateTime 的类 (5.1 中开始实验加入,5.3

版本中扩展了一些方法)…

$date = '2040-02-01';

$format = 'Y-m-d H:i';

$mydate2 = new DateTime($date);

echo '

正常时间:',

$mydate2->format($format),

'

';

echo '时间溢出:',date('Y-m-d H:i',strtotime($date));

exit;

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值