成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? 關于PHP轉換超過2038年日期出錯的問題解決
全站頭部文字 我要出現(xiàn)在這里
關于PHP轉換超過2038年日期出錯的問題解決 767 2023-12-08   

前言

最近在寫一個項目接口。測試中發(fā)現(xiàn)服務器上測試正常的功能,在本地一直有問題。一步步的排查,最終鎖定問題是由于函數(shù)strtotime返回了一個false值,導致數(shù)據(jù)插入數(shù)據(jù)庫失敗。

相同代碼運行結果不一樣,原因那就是環(huán)境不一致導致。要么是PHP版本不同,要么是位數(shù)不同。

我電腦是64位的。這里是PHP位數(shù)不一致,服務器使用64位,而我本地是32位。而strtotime被傳入了一個字符串2050-1-1 23:59:59,該參數(shù)大于了2038-1-19 03:14:07所以在32位PHP下直接返回false,而64位PHP不受影響。

Y2K38漏洞

導致上述問題的根本原因就是Y2K38漏洞,也被稱為Unix Millennium Bug。

32位系統(tǒng)或PHP

此漏洞將會影響到所有 32 位系統(tǒng)下用UNIX 時間戳整數(shù)來記錄時間的 PHP,及其它編程語言。一個整型的變量所能保存的最大時間為 2038 年01月19 日 03:14:07。超過這個時間后,整型數(shù)值將會溢出。

64位系統(tǒng)或PHP

64位系統(tǒng)下可以保存的日期最遠日期是現(xiàn)在宇宙年齡的21倍——292億年。所以不會受到該漏洞影響。

如何檢測

如何知道你的系統(tǒng)是否收到該漏洞的影響。很簡單,直接使用strtotime去轉換一個大于2038年1月19日03:14:07日期。或者使用date函數(shù)將一個大于2147454847時間戳轉換為日期。

下面具體演示一下

方法一

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

上面結果如果返回2050-12-31 23:59:59那么就沒有問題。如果返回1914-11-25 09:31:43那么就受收到影響。

方法二

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

上面結果如果返回2556115199那么就正常。如果返回false那么也會受到影響。

解決方案

方案一

更換系統(tǒng)和PHP均為64位。這個代價比較大,但是可以永久解決問題。

方案二

PHP5.2版本之后提供了一個函數(shù)DateTime可以臨時解決一下問題。

// 1、日期字符串轉換為時間戳
$obj = new DateTime("2050-12-31 23:59:59");
echo $obj->format("U"); // 2556115199

// 2、時間戳轉換為日期字符串
$obj = new DateTime("@2556115199"); // 這里時間戳前要寫一個@符號
$timezone = timezone_open('Asia/HONG_KONG'); // 設置時區(qū)
$obj->setTimezone($timezone); 
echo $obj->format("Y-m-d H:i:s"); // 2050-12-31 23:59:59

// 而且DateTime還可以有其他玩法
$obj = new DateTime("2050-12-31 23:59:59");
echo $obj->format("Y/m/d H:i:s"); // 換種方式輸入時間字符串2050/12/31 23:59:59

通過DateTime類來操作日期不會受到Y2K38漏洞的影響,可以最遠支持到9999年12月31日

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對綠夏網的支持。


主站蜘蛛池模板: 色戒 在线看| 欧美gv网站| 国产电影网站| 电影潘金莲| 无内秘书| 女同恋性吃奶舌吻完整版| pulp fiction| 贾冰又出新的喜剧电影| 十八岁免费看的电视剧| 水咲ローラ| 礼记二则原文和译文| 河东舞曲的士高| 2024年怀男怀女表图| 生活片爱情电影大全| 《杨贵妃淫史》三级| 出轨幻想| 盛健| 小城故事多三观不正| 感恩简谱钟丽燕| 欧美13| 辰巳ゆい| 电影壮志凌云女版满天星法版在线看 | 蜡笔小新日语| 浙江卫视直播在线观看高清电视台| 社会好全部歌词| 最后的武士| 脸庞村庄| 太上老君说五斗金章受生经| bbbbbbbbb免费毛片视频| 开心鬼救开心鬼| 心跳源计划演员表| 张雅玲| 抖音怎么开店卖东西| 香港卫视中文台| 逆光飞翔 电影| 一年级英语书| 尸家重地演员表| 南方车站的聚会| 孔令辉简历及个人资料| 战狼15电影在线观看| 涩涩免费|

!!!站長長期在線接!!!

網站、小程序:定制開發(fā)/二次開發(fā)/仿制開發(fā)等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103