关于构建PHP维吾尔语考试阅卷系统平台的研究
2016-03-02贾志先
摘 要: 由于版本的问题,在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.