最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關于PHP轉(zhuǎn)換超過2038年日期出錯的問題解決

 更新時間:2017年06月28日 09:01:46   作者:嚴穎  
這篇文章主要給大家介紹了關于PHP轉(zhuǎn)換超過2038年日期出錯問題的解決方法,文中給出了詳細的解決方法,通過示例代碼讓大家更容易理解和學習,需要的朋友們下面來一起看看吧。

前言

最近在寫一個項目接口。測試中發(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去轉(zhuǎn)換一個大于2038年1月19日03:14:07日期?;蛘呤褂胐ate函數(shù)將一個大于2147454847時間戳轉(zhuǎn)換為日期。

下面具體演示一下

方法一

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、日期字符串轉(zhuǎn)換為時間戳
$obj = new DateTime("2050-12-31 23:59:59");
echo $obj->format("U"); // 2556115199

// 2、時間戳轉(zhuǎn)換為日期字符串
$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日

總結

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

相關文章

  • php的curl實現(xiàn)get和post的代碼

    php的curl實現(xiàn)get和post的代碼

    類似于dreamhost這類主機服務商,是顯示fopen的使用的。使用php的curl可以實現(xiàn)支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。
    2008-08-08
  • php提交表單發(fā)送郵件的方法

    php提交表單發(fā)送郵件的方法

    這篇文章主要介紹了php提交表單發(fā)送郵件的方法,實例分析了php操作表單發(fā)送郵件的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • PHP獲取真實客戶端的真實IP

    PHP獲取真實客戶端的真實IP

    本文主要介紹了PHP獲取真實客戶端的真實IP(REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR)的方法,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • PHP PDO函數(shù)庫(PDO Functions)

    PHP PDO函數(shù)庫(PDO Functions)

    PDO是一個“數(shù)據(jù)庫訪問抽象層”,作用是統(tǒng)一各種數(shù)據(jù)庫的訪問接口,與mysql和mysqli的函數(shù)庫相比,PDO讓跨數(shù)據(jù)庫的使用更具有親和力.
    2009-07-07
  • PHP使用ob_start生成html頁面的方法

    PHP使用ob_start生成html頁面的方法

    這篇文章主要介紹了PHP使用ob_start生成html頁面的方法,對ob_start的用法做了較為詳細的分析,并以實例總結了ob_start生成html頁面的實現(xiàn)方法,需要的朋友可以參考下
    2014-11-11
  • 利用PHP如何統(tǒng)計Nginx日志的User Agent數(shù)據(jù)

    利用PHP如何統(tǒng)計Nginx日志的User Agent數(shù)據(jù)

    這篇文章主要給大家介紹了關于如何利用PHP統(tǒng)計Nginx日志的User Agent數(shù)據(jù)的相關資料,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • php簡單socket服務器客戶端代碼實例

    php簡單socket服務器客戶端代碼實例

    這篇文章主要介紹了php簡單socket服務器客戶端代碼實例,本文給出了兩個版本的服務器端口,對代碼的問題和改進做了說明,并給出了使用這個socket服務器的客戶端代碼,需要的朋友可以參考下
    2015-05-05
  • PHP命名空間namespace定義及導入use用法詳解

    PHP命名空間namespace定義及導入use用法詳解

    這篇文章主要介紹了PHP命名空間namespace定義及導入use用法,結合實例形式詳細分析了php中命名空間namespace的功能、定義及導入use相關使用方法與操作技巧,需要的朋友可以參考下
    2018-03-03
  • 兩種php去除二維數(shù)組的重復項方法

    兩種php去除二維數(shù)組的重復項方法

    這篇文章主要介紹了兩種php去除二維數(shù)組的重復項方法,大家可以進行比較看哪一種更適合自己,需要的朋友可以參考下
    2015-11-11
  • PHP與Web頁面的交互示例詳解一

    PHP與Web頁面的交互示例詳解一

    這篇文章主要介紹了PHP與Web頁面的交互示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08

最新評論

平塘县| 花莲县| 博罗县| 石家庄市| 西峡县| 鄱阳县| 巴中市| 日喀则市| 二手房| 宜川县| 兴宁市| 庄河市| 永修县| 朝阳市| 任丘市| 五峰| 和田县| 嵊泗县| 夏河县| 连平县| 蒲城县| 株洲市| 嘉定区| 玉林市| 乐业县| 治多县| 台东县| 孙吴县| 桓仁| 阿鲁科尔沁旗| 宁晋县| 赤城县| 桐城市| 惠安县| 鄂州市| 阿瓦提县| 洛扎县| 屏东县| 玉溪市| 潜山县| 惠来县|