Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
64位php时间戳问题_Php_Iis 6_64 Bit_Windows Server 2003_Timestamp - Fatal编程技术网

64位php时间戳问题

64位php时间戳问题,php,iis-6,64-bit,windows-server-2003,timestamp,Php,Iis 6,64 Bit,Windows Server 2003,Timestamp,需要能够使用超过32位时间戳限制的日期,因此将服务器升级到Windows server 2003 64位版本。并运行PHP5.2.5 64位。但是,仍然不能使用超过32位限制的日期 echo标准时间(“11-11-2050”) 不返回任何内容 使用C:\WINDOWS\system32\inetsrv\fcgiext.dll在IIS 6.0上运行php 如果我遗漏了什么,请告诉我。找到了一个Adodb日期库,它可以满足我的需要,但我更喜欢使用本机php函数,所以如果可能的话,我不必修改现有代码

需要能够使用超过32位时间戳限制的日期,因此将服务器升级到Windows server 2003 64位版本。并运行PHP5.2.5 64位。但是,仍然不能使用超过32位限制的日期

echo标准时间(“11-11-2050”)

不返回任何内容

使用C:\WINDOWS\system32\inetsrv\fcgiext.dll在IIS 6.0上运行php

如果我遗漏了什么,请告诉我。找到了一个Adodb日期库,它可以满足我的需要,但我更喜欢使用本机php函数,所以如果可能的话,我不必修改现有代码

有人知道是否有可能在WindowsServer200364位上实现这一点吗


感谢您,PHP在Win32上还没有使用64位时间。\

我刚刚在32位机器上尝试了这一点,结果返回false和var\u dump:

var_dump strtotime("11-11-2050");
echo不返回任何内容,因为false不可显示。我注意到了php的变更日志

5.1.0现在在失败时返回FALSE,而不是-1

该页底部还有一条注释说明:

注:时间戳的有效范围通常是从1901年12月13日星期五20:45:54 UTC到2038年1月19日星期二03:14:07 UTC。(这些是与32位有符号整数的最小值和最大值相对应的日期。)此外,并非所有平台都支持负时间戳,因此您的日期范围可能被限制为不早于Unix历元。这意味着,例如1970年1月1日之前的日期将不适用于Windows、某些Linux发行版和一些其他操作系统。PHP5.1.0和更新的版本克服了这个限制

因此,我认为Windows即使是64位版本,也可能在php中使用32位整数。您安装了64位版本的php吗


phpinfo()应该能够显示在系统行下运行的php的版本。

这据称是在2008年修复的,如bug所示

derick@php.net说,

此错误已在CVS中修复

源的快照每三小时打包一次;这一变化 将出现在下一个快照中。您可以在以下位置获取快照:

感谢您的报告,感谢您帮助我们改进PHP


使用DateTime类,因为它在32位和64位中工作,并且内置于php5x中


要最小化代码重写:

<?php    
function adodb_strtotime($str) {
   $dateTime = new DateTime($str);
    return $dateTime->format("U");
}
?>

然后添加该类:

然后只需在所有常规日期函数前面添加adodb_uu即可。例如,mktime将是adodb_mktime

日期将为adodb_日期


STROTIME将是adodb\U STROTIME。。。你明白了

如果你把日期的顺序改为“2050-11-11”,结果会是什么?OP说“…所以我们的服务器升级到了Windows server 2003 64位版本…”并没有改变PHP被编译为使用32位时间的事实-操作系统没有决定这一点,这是编译时间的决定,PHP对此使用32位值。这是我们下载并安装的PHP版本。它在IIS6.0上的64位Windows Server 2003上运行。我们有什么办法可以让它工作吗?只有一个:编译你自己的64位版本的PHP。即使是64位版本的PHP在Windows上也使用32位时间,所以这不会有多大帮助-但是,对于你提出的问题,一个更简单的测试是让它们变为dump(PHP_INT_MAX);这里有一个64位版本的php:在主要的php.net网站上查看,我认为他们没有正式支持64位php atm。是的,它在那里是固定的-然而,php()唯一的“64位windows”发行版使用的是一个源代码树,它在该修复之前几乎存在一年。这是我们从fusionxlan使用的版本。我们可以做些什么来更新该版本以支持64位时间戳吗?尽管从表面上看,这可能看起来是个错误的建议(您可能需要重写相当多的代码),但实际上这是一个非常好的建议,我可能应该想到。干得好,ladieu。很好。这对我很有效。我将不得不更新我的代码,我对此并不感到兴奋,但至少它的核心功能。这样做:添加这个函数
函数adodb_strotime($str){$dateTime=new dateTime($str);返回$dateTime->format(“U”);}然后使用这个库:这样可以最大限度地减少重写,只在日期函数前面添加adodb
<?php    
function adodb_strtotime($str) {
   $dateTime = new DateTime($str);
    return $dateTime->format("U");
}
?>