Windows-Server-2003

嘗試為 64 位 Windows 系統建構 php 時,如何解決此錯誤?

  • August 20, 2010

我需要在我們的 Windows 2003 64 位伺服器上的網站上執行 php,雖然 php 為 Windows 提供 32 位二進製文件,但他們目前不提供 64 位二進製文件。

我無法將 IIS 6 切換為執行 32 位應用程序,因為它會停止我所有其他 asp.net 站點的工作。

我正在做的是嘗試按照本指南從原始碼為 64 位目標建構 php:http ://wiki.php.net/internals/windows/stepbystepbuild

我使用 Windows SDK 建構環境命令視窗來建構它並通過發出命令開始:

setenv /x64 /xp /release

..將建構目標設置為“Targeting Windows XP x64 RELEASE”

我發布了以下配置行:

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

這會導致建構過程中的失敗(如果我省略了我不想做的 –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’關鍵字”。我懷疑我沒有做足夠的工作來告訴建構過程提供 64 位輸出,任何人都可以建議如何克服這個問題嗎?

您的“_asm”是指嵌入在 C 程式碼中的內聯彙編語言。

“安騰和 x64 處理器不支持內聯彙編,”每http://msdn.microsoft.com/en-us/library/4ks26t93(VS.80).aspx .

因此,您不能簡單地重新編譯它;您將不得不重新編寫程式碼以刪除內聯彙編程式碼並將其替換為 C 語言指令。這不僅需要大量工作,而且可能會取消使用內聯彙編程式碼實現的性能優化。可能有一種方法可以使用單獨的彙程式序來建構彙編語言部分,然後將它們連結到項目中,但這顯然超出了我們的系統管理員領域。

我懷疑這就是為什麼沒有官方的 64 位 PHP for Windows 建構的原因。我聽說過 PHP 的非官方64 位 Windows 版本,但它們被認為是不穩定的。

您是否考慮過專門為 PHP 設置一個單獨的 32 位應用程序池?這將使您能夠在 32 位兼容模式下執行 PHP,而不會破壞您的 64 位 ASP.NET 應用程序。

引用自:https://serverfault.com/questions/172440