我有两个使用不同操作系统的网络服务器。
SERVER 1 在带有 LAMP 服务器的 Centos 5 中运行。 PHP 版本 5.3.21
SERVER 2 在带有 LAMP 服务器的 openSUSE 11.3 中运行。 PHP 版本 5.3.5
两个 PHP 配置相同。有些是默认的。
我有一个包含如下代码的 php 文件:
<?php
/* TEST STRTOTIME */
echo "<br /><br />".strtotime("2038-01-01");
echo "<br /><br />".strtotime("2039-01-01");
?>
当我在 SERVER 1 中运行这个文件时,结果是:
2145934800
2177470800
但是当我在SERVER 2 中运行这个文件时,第二次转换没有产生任何结果。只显示结果是:
2145891600
为什么在两台服务器上转换的结果给出不同的值 ?而同一个文件。为什么在 SERVER 2 无法在上述日期 2038-01-01 转换?这个问题有解决办法吗?
最佳答案
您的远程服务器可能是 32 位的。您将需要一个 64 位服务器来处理日期 after roughly 2038 .
原因是您的远程服务器将其整数存储为带符号的 32 位整数。可以存储为带符号的 32 位整数的最大数是 2,147,483,647
(2^31 - 1
)。由于这个数字是 1970 年 1 月 1 日(Unix 纪元)之后的秒数,你可以看到这个数字最终会用完(如果不检查边界,可能会溢出)。
图片来源:Wikipedia
关于PHP:为什么 strtotime 转换会给出不同的值并且仅限于特定日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15778849/