最近有企业建站系统用户发现一个问题,企业有效期时间修改后保存无效,经仔细检测发现是超过了2038年01月19日的时间就无效了,后来在网上也找到了相关的说法证实。

Y2K38 漏洞

Y2K38,又称 Unix Millennium Bug,此漏洞将会影响到所有 32 位系统下用 UNIX 时间戳整数来记录时间的 PHP,及其它编程语言。一个整型的变量所能保存的最大时间为 2038 年01月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 年刚好是这个数。

64 位系统会受到影响吗?

理论上不会,强烈建议进行一下测试。64 位系统下可以保存的日期最远日期是现在宇宙年龄的 21 倍~ 292 亿年。

那么32位机器上,应该如何解决这个问题呢?

PHP 从 5.2 版本开始引入了一个 DateTime 的类(5.1 中开始实验加入,5.3 版本中扩展了一些方法):

    • <?php
    • $date = '2040-02-01';
    • $format = 'Y-m-d H:i';
    • $mydate2 = new DateTime($date);
    • echo '<p>正常时间:'.$mydate2->format($format).'</p>';
    • echo '时间溢出:'.date('Y-m-d H:i',strtotime($date));
    • ?>

附,strtotime()函数用法小记
用strtotime比较时间大小,原来用strtotime(date("Y-m-d h:i:s"))进行比较,上周测试是正常的。
但是今天提交了个bug说日期范围不正确。后来改成strtotime("now");就可以了。
可能是存在时区的转换问题。
经过测试发现,strtotime(date("Y-m-d h:i:s")) 比如当前时间是下午5点21分。输入的是2013-01-21 5:30 35。而time()输出的是2013-01-21 17:30 35。
原来,h是区分大小写的,小写h输出的是时区的小时,17点就是5点。而大写H是输出17的。
而且年份y的大小写是有区别的,小写y输出的是13。大写Y输出的是2013。
后来,直接用time()代替strtotime("now"),效率更高。

测试解决方法

<?php
$date = new DateTime('2110-01-01 01:01:01');
echo  ($date->format('U') );
?>

php中strtotime与mktime的Y2K38漏洞(时间最长为2038年)相关推荐

  1. php strtotime mktime,php中time()和mktime()用法的区别分析

    在php编程中,时间函数time(),返回当前时间的.而mktime()函数,不是返回当前时间,而是格式化时间. 虽然单独写mktime()而不加任何参数如:echo mktime()和echo ti ...

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

    Y2K38 漏洞是什么? Y2K38,又称 Unix Millennium Bug, 这个漏洞将会影响到所有 32 位系统下用 UNIX 时间戳整数来记录时间的 PHP,及其它编程语言.一个整型的变量 ...

  3. java strtotime_PHP strtotime()与mktime():日期转时间戳

    前面我们介绍了<time() 函数>可以获取当前的时间戳,那么如果想要将一个具体的时间转换成时间戳的话该怎么办呢? PHP 中提供了两个函数可以实现将具体的日期转换为时间戳,分别是 str ...

  4. php中strtotime(date,js模仿php中strtotime()与date()函数实现方法

    本文实例讲述了js模仿php中strtotime()与date()函数实现方法.分享给大家供大家参考.具体如下: 在js中没有像php中strtotime()与date()函数,可直接转换时间戳,下面 ...

  5. php中strtotime的意思,php中strtotime函数用法详解

    本文实例讲述了php中strtotime函数用法.分享给大家供大家参考.具体如下: strtotime(字符串$时间[,诠释$现在])int strtotime(string $time [,int ...

  6. php中strtotime的意思,PHP中strtotime

    关于 PHP中strtotime的搜索结果 问题 对1970年之前的日期使用strtotime?mysql 我在mysql中有一个文本列,它以yyyy-mm-dd格式存储日期值.现在,在我的php页面 ...

  7. c++ error函数_Linux中create_elf_tables函数整型溢出漏洞分析(CVE201814634)

    在这篇文章中,我们将跟大家分析Linux平台中createelftables函数的一个整型溢出漏洞(CVE-2018-14634). 概述 在近期的一次安全分析过程中,我们在64位Linux系统内核里 ...

  8. 速修复!开源编辑器CKEditor 中存在两个严重XSS漏洞,影响Drupal 和其它下游应用...

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全 ...

  9. 开源OS FreeBSD 中 ftpd chroot 本地提权漏洞 (CVE-2020-7468) 的技术分析

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 7月份,一名匿名研究员向 ZDI 报告了 FreeBSD 中的一个本地提权漏洞.它位于 FreeBSD 的文件传输协议守护进程 (ft ...

  10. 移动互联网新协议 GTP 中被曝多个高危漏洞,影响4G和5G 用户

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 Positive Technologies 公司上周发布报告<2020年 LTE 和5G 网络中的漏洞>指出,移动网络运营 ...

最新文章

  1. 现存最古老计算机手册重见天日,比ENIAC要先进!
  2. 无盘服务器2个dhcp,无盘 dhcp 服务器配置
  3. CSS3 keyframes动画实现弹跳效果
  4. linux怎么使用cal命令,Linux cal命令
  5. JDK8的日期时间类3
  6. (Docker实战) 第3篇:Centos7 拉取和部署Mysql
  7. 4.UiCollection API 详细介绍
  8. Linux神器strace的使用方法及实践
  9. 查找某个整数(数组)
  10. Spring-boot-2.1.X源码编译
  11. Microsoft漏洞补丁包下载地址大全
  12. 工业镜头视场、倍率、焦距之间的关系
  13. 水温控制系统设计(AVRmega16单片机)代码编写(包含显示器、单片机、温度传感器)
  14. 英语3500词(16/20)trade主题(2022.1.28)
  15. 英特尔:准备好放弃芯片制造了吗?
  16. strconv,strings的学习(三)
  17. js 写一个任意类型转浮点小数点保留两位
  18. 操作系统期末大题复习
  19. RTX30系列-Ubuntu系统配置与深度学习环境Pytorch配置
  20. PHP保存微信头像到本地

热门文章

  1. prusai3打印机使用教程_【打印虎原创】Prusa_i3_3D打印机校准图解教程-基础篇
  2. 初探springboot的荆棘之路
  3. STM32F103RB 实作笔记(三)- LED 7 节显示(正点原子 STM32F103 nano开发板)程式解析(上)
  4. 计算机组装主机怎么拆,【电脑组装知识网】电脑主机组装教程之戴尔显示器底座拆卸教程...
  5. 闲鱼数据采集学习研究
  6. Ajax实战(Ajax in action中文版)[一周内7折] →推荐 →新书
  7. 武汉大学计算机学院朱晓薇,基于SDN的TDMA体制星间网络架构设计
  8. 2018-2019-2 网络对抗技术 20165322 Exp3 免杀原理与实践
  9. 畅享9能改鸿蒙,华为畅享9 root教程_畅享9卡刷root包来获取root权限的方法
  10. 转载:SpringBoot非官方教程 | 第二十四篇: springboot整合docker