摘 要: 由于版本的問題,在Windows Server 2008下安裝和加載微軟的PHP訪問SQL Server 2008模塊SQLSRV過程中會遇到一些問題。討論了如何安裝和配置Web服務器(IIS)角色,應用FastCGI服務支持PHP,以及安裝微軟發布的SQL Server Native Client 2012組件和SQL Server Driver for PHP驅動程序等問題。將應用PHP開發的維吾爾語考試閱卷系統安裝在Windows Server 2008下,提高了資源的利用率和系統的穩定性。
關鍵詞: PHP; SQL Server 2008; 維吾爾文; 閱卷系統
中圖分類號:TP391.1 文獻標識碼:A 文章編號: 2095-2163(2016)01-
Abstract: Due to the operating system version, some problems happened when installed and loaded PHP and the SQLSRV modules to visit SQL Server 2008 in Windows Server 2008. This article discusses how to install and configure the web server (IIS) role, support PHP by application of FastCGI services, and install Microsoft SQL Server Native Client 2012 components and SQL Server driver for PHP driver, and other issues. The paper has realized the online marking system of Uyghur proficiency test, which is developed by PHP, and installed under the Windows Server 2008, therefore increases the utilization of resources and stability of the system.
Key Words: PHP; SQL Server 2008; Uyghur character; online marking system
0 引言
在[1,2]中,研究了應用PHP和SQL Server 2008開發維吾爾語考試閱卷系統的問題。[1,2]中的維吾爾語考試閱卷系統運行環境為:一臺安裝Windows 7、SQL Server 2008和XAMPP的計算機。目前,一些考試系統和閱卷系統的服務器操作系統為Windows Server 2008,數據庫為SQL Server 2008。在Windows Server 2008下,應用IIS 7.0替代XAMPP 中的Apache網頁服務器,可以將PHP開發的維吾爾語考試閱卷系統安裝在Windows Server 2008下,從而提高資源的利用率和系統的穩定性。由于版本的問題,在Windows Server 2008下,安裝和加載微軟的PHP訪問SQL Server 2008的SQLSRV模塊過程中會遇到一些問題。經過研究和探討,解決了這些問題。在Windows Server 2008下建立了PHP維吾爾語考試閱卷系統的平臺,實現了系統的集成和整合。
1 PHP訪問SQL Server數據庫處理維吾爾文的方法
在計算機中,維吾爾文字符通常采用Unicode編碼。維吾爾文126種不同的字體符號被分配到Unicode編碼中的阿拉伯字符基本區,擴展區A和擴展區B[3]。UTF-8編碼(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼。在UTF-8編碼中,一部分被分配到阿拉伯字符基本區的維吾爾文字符,采用兩個字節編碼,其它被分配到阿拉伯字符擴展區A和擴展區B的維吾爾文字符,采用三個字節編碼。在SQL Server的數據庫表中,選擇可以存儲Unicode數據的nchar、nvarchar、ntext等字段類型,即可解決維吾爾文的存儲問題。在PHP中,常用的訪問SQL Server方式有odbc、mssql和adodb等。在[2]中,對PHP系統和代碼進行適當的修改和擴展后,應用sqlsrv、adodb訪問SQL Server方式可以支持UTF-8字符集,從而解決了PHP訪問SQL Server數據庫中維吾爾文數據的問題。因此,在Windows Server 2008下建立PHP維吾爾語考試閱卷系統的平臺,要安裝和配置Web服務器(IIS)角色,應用FastCGI服務支持PHP,還要安裝微軟發布的SQL Server Native Client 2012組件和SQL Server Driver for PHP驅動程序,解決在PHP中應用sqlsrv、adodb訪問SQL Server 2008數據庫的問題。
2 PHP訪問SQL Server數據庫的驅動程序和模塊
從PHP 5.3版本開始,PHP不再提供php_mssql模塊。訪問SQL Server數據庫,需要利用微軟發布的驅動程序SQL Server Driver for PHP[4,5]。由于模塊名和函數名中都冠有“sqlsrv”字符,SQL Server Driver for PHP驅動程序又稱為SQLSRV。
微軟發布的SQL Server Driver for PHP驅動程序版本有2.0,3.0,3.1和3.2。2.0和3.0版支持PHP 5.3和5.4,3.1版支持PHP 5.4和5.5,3.2版支持PHP 5.4, 5.5和5.6。
在PHP加載SQL Server Driver for PHP模塊過程中,由于版本不兼容,會出現加載出錯的情況。因此,在安裝SQL Server Driver for PHP模塊時,要注意PHP和SQL Server Driver for PHP模塊版本之間的一致性。
在每個版本中,SQL Server Driver for PHP分別包含有Thread Safe和Non-Thread Safe的驅動程序模塊。例如,3.2版本中有12個驅動程序模塊,如表1所示。
在PHP Non-Thread Safe版本中有php5.dll文件,可加載非線程安全的SQLSRV驅動程序。在PHP Thread Safe版本中有php5ts.dll文件,可加載線程安全的SQLSRV驅動程序。要根據不同的PHP版本選擇不同的SQL Server Driver for PHP驅動程序模塊。
在Windows Server 2008和SQL Server 2008下,應用微軟發布的驅動程序SQL Server Driver for PHP,需要安裝SQL Server Native Client 2011以上版本的sqlncli.msi。
SQL Server Native Client包含SQL OLE DB提供程序和SQL ODBC驅動程序。SQL Server Native Client 2011以上版本中包含下列組件,如表2所示。
4 安裝PHP訪問SQL Server2008數據庫的驅動程序和模塊
在PHP中,常用的訪問SQL Server方式有mssql、odbc和adodb等。在默認情況下,這些訪問SQL Server方式不支持Unicode編碼,無法處理SQL Server中的維吾爾文[2]。安裝SQL Server Native Client組件和SQLSRV模塊,應用sqlsrv訪問SQL Server方式可以支持UTF-8字符集。安裝SQL Server Native Client組件和ADODB包,并修改adodb5\drivers文件夾下adodb-mssqlnative.inc.php文件中的_connect()函數,也可以支持UTF-8編碼[2]。因此,安裝相應的組件,對PHP系統和代碼進行適當的修改和擴展,sqlsrv、adodb訪問SQL Server方式可以處理SQL Server 2008數據庫中的維吾爾文數據[2]。
4.1安裝SQL Server Native Client
在Windows Server 2008上安裝SQL Server Native Client 2012組件sqlncli.msi時,會出現“安裝此產品失敗,因為此操作系統不支持該產品。”的對話框。解決這一問題的方法是從微軟網站下載和安裝Windows Server 2008 Service Pack 2補丁程序Windows6.0-KB948465-X86.exe。安裝Windows Server 2008 Service Pack 2后,可以安裝SQL Server Native Client組件。
4.2安裝SQLSRV模塊
如果采用sqlsrv訪問SQL Server 2008方式,需要根據PHP的版本選擇安裝相應的微軟SQLSRV模塊。
例如,PHP版本為 Non-Thread Safe 5.4.45,則選擇SQL Server Driver for PHP 3.0中的php_sqlsrv_54_nts.dll,php_pdo_sqlsrv_54_nts.dll。將這兩個驅動程序復制到c:\php\ext文件夾下。在php.ini文件的Dynamic Extensions部分,增加:
extension=php_sqlsrv_54_nts.dll
extension=php_pdo_sqlsrv_54_nts.dll
在sqlsrv連接SQL Server數據庫的代碼中增加"CharacterSet"=>"utf-8"(表示SQL Server的字符集為UTF-8編碼) [2],可以訪問SQL Server數據庫中維吾爾文數據。如:
$coninfo=array("Database"=>$dbname,"UID"=>$dbuser,"PWD"=>$dbpass,"CharacterSet"=>"utf-8");
$conn=sqlsrv_connect($dbhost,$coninfo) or die ("連接失敗!");
4.3 安裝ADODB包
如果采用adodb訪問SQL Server 2008方式,則不需要安裝微軟的SQL Server Driver for PHP模塊,而需要從http://sourceforge.net/projects/adodb網站上下載和安裝ADODB包。將ADODB包解壓縮到網頁所在的文件夾下,并修改adodb5\drivers文件夾下adodb-mssqlnative.inc.php文件中的_connect()函數,使之支持UTF-8編碼[2],也可以訪問SQL Server數據庫中維吾爾文數據。
5配置Windows Server 2008 IIS加載PHP
5.1 Windows Server 2008 IIS7.0 安裝與配置
在Windows Server 2008 的“初始配置任務”或“服務器管理器”窗口中,單擊“添加角色”,打開“添加角色向導”窗口[7]。在“添加角色向導”的選擇服務器角色步驟中,選擇 “Web服務器(IIS)”角色。
在“選擇角色服務”的實現步驟中,選擇“CGI”服務,其他的角色服務可根據需要選擇。
5.2 配置FastCGI加載PHP
在Windows IIS下加載PHP,通常有CGI、ISAPI和FastCGI等三種方式。
從5.3.0版以后,PHP不再支持ISAPI方式,采用FastCGI方式。應用FastCGI方式加載PHP的安裝和配置方法為:
1)在Internet 信息服務(IIS)管理器的功能視圖中,單擊“處理程序映射”,打開處理程序映射頁面;
2)在處理程序映射頁面中,單擊“添加模塊映射…”,打開添加模塊映射對話框;
3)在如圖1所示的添加模塊映射對話框中,依次輸入:
6 結束語
在Windows Server 2008下,安裝PHP,加載微軟的SQL Server Native Client 2012組件和PHP訪問SQL Server 2008模塊SQLSRV,安裝和配置Web服務器(IIS)角色,應用FastCGI服務支持PHP之后,可以將應用PHP開發的維吾爾語考試閱卷系統安裝在Windows Server 2008下。
在Windows Server 2008下,應用 IIS建立PHP維吾爾語考試閱卷系統的平臺,可以實現系統的集成和整合,提高資源的利用率和系統的穩定性。
參考文獻:
[1] 賈志先.維吾爾語口試閱卷系統開發中若干問題的研究[J].智能計算機與應用,2015,5(4):30-32.
[2] 賈志先.PHP與SQLServer處理維吾爾文的方法研究[J].智能計算機與應用,2015,5(5):26-28.
[3] 維尼拉·木沙江,艾爾肯·伊米爾.維吾爾文Unicode在線處理技術與實現[J].新疆大學學報(自然科學版), 2004,21(3):332-334.
[4] Microsoft. Microsoft Drivers for PHP for SQL Server [EB/OL]. [2015-5-1]. https://www.microsoft.com/en-us/download/details.aspx?id=20098.
[5] Tali Smith. Install the SQL Server Driver for PHP [EB/OL]. [2009-11-15]. http://www.iis.net/learn/application-frameworks/install-and-configure-php-on-iis/install-the-sql-server-driver-for-php..
[6] PHP Group. PHP for Windows [EB/OL]. [2008-9-1]. http://windows.php.net/download#php-7.0..
[7] PHP Group. Microsoft IIS 7.0 and later [EB/OL]. [2012-3-1]. http://php.net/manual/en/install.windows.iis7.php.