現下流行LAMP,如果選擇Windows服務器,那么一般都會選擇IIS+Asp.Net+SQL Server(可以簡稱為WINS),這些配置起來,都是非常方便的。
但也有一些特殊的服務器配置,例如:Windows 2008 R2 x64 + IIS 7 + PHP + SQL Server 2008 R2 x64(簡稱為WIPS),將Asp.Net換為PHP,原本以為很簡單的一件事,結果折騰了好幾天才搞定。
為了給其他人留下一點前車之鑒,特寫此文。
相關理論
1. IIS支持多種方式來擴展語言,對於IIS7來說,通過FastCGI方式來執行PHP文件
2. PHP通過配置文件中的“extension”項,擴展支持一些功能,但目前PHP本身不再提供支持MS SQL Server的組件,幸好微軟提供了(但這里有個大大的陷阱)
3. 微軟提供的PHP的擴展組件,支持訪問MS SQL Server,需要Visual Studio C++ Redistributable的支持,這個微軟也提供了
4. 還需要微軟的MS SQL Server Native Client作為驅動
通過上述一環扣一環,就可以實現在Windows服務器上,在IIS+PHP的環境下,訪問MS SQL Server了。
細數幾個大坑
坑1:訪問SQL Server 2008 R2,需要安裝Microsoft SQL Server 2012 Native Client
坑2:微軟提供的PHP組件,只支持32位,也就是x86平台;雖然PHP自身提供了支持x64平台的,但是這兩個是配不上的
坑3:若一定要在Windows Server 64bit(x64),PHP選擇x64,則不能選擇IIS;替代選項是Apache,而且PHP SQL Server組件需要特殊定制的非官方版;而且Apache官方不提供Windows版了,要去第三方下載
坑4:PHP有TS、NTS之分,又有x86、x64之分;Visual Studio C++ Redistributable則有2008、2010、2012、2015之分,而且也有x86、x64之分,不同的Visual Studio C++ Redistributable版本對應不同的PHP版本。一個不小心,就掉坑里了
版本對應關系:
1、選擇IIS,則PHP版本必須選擇x86、nts
2、PHP版本號有VC*這樣的內容,和Visual Studio C++ Redistributable對應關系是:VC9-VS2008 SP1、VC11-VS2012、VC14-VS2015
PHP版本選擇x86,則Visual Studio C++ Redistributable也必須是x86;反之,則都必須選擇x64
准備項
1、IIS擴展支持FastCGI,如下圖,必須勾選上“CGI”選項
安裝方式一(推薦)
如果服務器可以訪問Internet的話,推薦選擇Web Platform Installer,省心省力,但是只有5.2.17和5.3.5兩個版本可以選。
1、打開網址:http://www.microsoft.com/web/platform/phponwindows.aspx
2、選擇好版本,點擊對應的按鈕,進入如下界面,這里以5.3.5版本為例
3、點擊“Install Now”,可以下載獲得一個PHP53.exe文件,運行之,可以到如下界面,點擊“Install”
4、這里會列出需要安裝的組件,點擊“I Accept”
5、接下來是漫長的安裝過程,如果中途失敗了,繼續從第3步開始,按照相同節奏來一次,直至全部安裝成功
安裝成功后,可以看到具體的安裝的組件。
6、安裝成功后,可以通過PHP Manager來查看安裝后的PHP路徑
安裝方式二(PHP Manager或手工)
1、安裝Microsoft SQL Server 2012 Native Client,安裝文件可以去微軟官網下載
2、下載PHP包,一定要選擇x86和nts的,並解壓文件到“Program Files (x86)”目錄下。
3、根據PHP包的VC版本,安裝Visual Studio C++ Redistributable,請選擇x86版本,VS的版本號,請參考上述對應關系,安裝文件可以去微軟官網下載
4、去微軟官網下載Microsoft Drivers for PHP for SQL Server,也就是PHP的SQL訪問組件,執行解壓出DLL文件
5、將PHP的SQL訪問組件,根據PHP版本號挑選出nts類型的dll,復制到PHP錄下的ext子文件夾
6、推薦安裝PHP Manager,可以協助更快的配置,安裝文件請自行搜索去
7、啟動IIS管理工具,選擇“PHP Manager”
8、通過PHP Manager,通過“Register new PHP version”,選擇PHP目錄下的php-cgi.exe
9、啟動PHP Extensions,點擊“Enable or disabled an extension”,啟動PHP的擴展組件,這樣就可以啟動PHP訪問SQL的組件
10、其他PHP配置項,建議直接編輯PHP.INI文件,根據你的實際情況,增加如下內容:
[WebPIChanges] error_log=C:\Windows\temp\PHP53_errors.log upload_tmp_dir=C:\Windows\temp session.save_path=C:\Windows\temp cgi.force_redirect=0 cgi.fix_pathinfo=1 fastcgi.impersonate=1 fastcgi.logging=0 max_execution_time=300 date.timezone=Asia/Shanghai extension_dir="C:\Program Files (x86)\PHP\v5.3\ext\" [ExtensionList] extension=php_mysql.dll extension=php_mysqli.dll extension=php_mbstring.dll extension=php_gd2.dll extension=php_gettext.dll extension=php_curl.dll extension=php_exif.dll extension=php_xmlrpc.dll extension=php_openssl.dll extension=php_soap.dll extension=php_pdo_mysql.dll extension=php_pdo_sqlite.dll extension=php_imap.dll extension=php_tidy.dll extension=php_pdo_sqlsrv.dll extension=php_sqlsrv.dll
11、這時候就可以開始檢測結果,打開PHPinfo文件,在“Registered PHP Streams”,我們可以看到sqlsrv,這就代表PHP可以訪問SQL Server了。
至此,我們就成功的完成了Windows 2008 R2 x64 + IIS 7.0 + PHP 5.3.2 + SQL Server 2008 R2 x64的環境配置了。
當然,這樣的環境,其實是運行在32位x86的環境中。
如果真的要運行在64位x64的環境中,則必須是Windows 2008 R2 x64 + Apache 2.4 + PHP 5.3.2 + SQL Server 2008 R2 x64這樣的環境配置,這個以后再補寫相關記錄了。