我怎样才能修复这个错误,试图build立一个64位的Windows系统的PHP?

我需要在我们的Windows 2003 64位服务器的网站上运行php,而php提供32位二进制文​​件的Windows,他们目前不提供64位的。

我不能切换IIS 6运行32位应用程序,因为它然后停止所有我的其他asp.net网站的工作。

我正在做的是试图从源代码build立一个64位的目标遵循本指南: http : //wiki.php.net/internals/windows/stepbystepbuild

我使用Windows SDK构build环境命令窗口来构build它,并通过发出以下命令启动:

setenv /x64 /xp /release 

..将生成目标设置为“定位Windows XP x64 RELEASE”

我发布了configuration行:

 configure --disable-all --enable-cli --enable-isapi 

这导致了在build设过程中的失败(如果我省略–enable-isapi,那么这样做会很好):

 Microsoft (R) Program Maintenance Utility Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. SAPI sapi\cli build complete cl : Command line warning D9035 : option 'Wp64' has been deprecated and will be removed in a future release php5isapi.c c:\php-sdk\php53dev\vc9\x64\php5.3\zend\zend_execute.h(234) : warning C4267: 'function' : conversion from 'size_t' to 'int', possibl oss of data sapi\isapi\php5isapi.c(286) : warning C4267: '=' : conversion from 'size_t' to 'int', possible loss of data sapi\isapi\php5isapi.c(300) : warning C4267: '=' : conversion from 'size_t' to 'DWORD', possible loss of data sapi\isapi\php5isapi.c(789) : warning C4267: '=' : conversion from 'size_t' to 'DWORD', possible loss of data sapi\isapi\php5isapi.c(791) : warning C4267: '=' : conversion from 'size_t' to 'DWORD', possible loss of data sapi\isapi\php5isapi.c(863) : warning C4267: 'function' : conversion from 'size_t' to 'uint', possible loss of data sapi\isapi\php5isapi.c(885) : error C4235: nonstandard extension used : '_asm' keyword not supported on this architecture sapi\isapi\php5isapi.c(885) : error C2065: 'mov' : undeclared identifier sapi\isapi\php5isapi.c(885) : error C2146: syntax error : missing ';' before identifier 'lpPage' sapi\isapi\php5isapi.c(885) : error C2065: 'esp' : undeclared identifier sapi\isapi\php5isapi.c(905) : warning C4267: 'function' : conversion from 'size_t' to 'int', possible loss of data sapi\isapi\php5isapi.c(908) : warning C4267: 'function' : conversion from 'size_t' to 'int', possible loss of data sapi\isapi\php5isapi.c(912) : warning C4267: 'function' : conversion from 'size_t' to 'int', possible loss of data NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\Bin\x86_amd64\cl.exe"' : return code '0x2' Stop. 

这看起来像是这样的问题: “使用了非标准扩展名:'此架构不支持'_asm'关键字” 。 我怀疑我没有做足够的事情来告诉构build过程提供一个64位输出任何人都可以build议如何克服这一点?

您的“_asm”是指embedded在C代码中的内联汇编语言。

“安装和x64处理器不支持内联汇编”,每个http://msdn.microsoft.com/en-us/library/4ks26t93(VS.80).aspx 。

因此,你不能简单地重新编译它; 您将不得不重新编写代码以删除内联汇编代码并将其replace为C语言指令。 这不仅会花费很多工作,而且可能会取消使用内联汇编代码实现的性能优化。 可能有一种方法可以使用单独的汇编程序来构build汇编语言部分,然后将它们链接到项目中,但显然这将远远超出我们的系统pipe理员领域。

我怀疑这是为什么没有正式的64位PHP的Windows版本的原因。 我听说过非官方的 64位Windows版本的PHP,但他们被认为是不稳定的。

你有没有考虑设置专门针对PHP的单独的32位应用程序池? 这将使您能够在不破坏64位ASP.NET应用程序的情况下以32位兼容模式运行PHP。