在Amazon Linux 2操作系统上为PHP 8.2版本安装PHP对SQL Server支持库

更新于2023年4月23日,Amazon Linux 2 + PHP 8.2验证通过。

一、前言

在某些测试场景下,例如:

  • 测试AWS的SCT工具对Microsoft SQL Server(以下简称MSSQL)的schema迁移
  • 测试Babelfish对MSSQL的兼容

此时可能需要一个基于PHP的demo应用来模拟环境。此时可选择WordPress的SQL Server版本(Wordpress官方是MySQL的)。由于Wordpress是PHP编写的,因此就需要为PHP增加SQL Server库的支持,才能通过Wordpress连接到SQL Server生成模拟数据。

在安装中发现,新版本PHP(7和8)默认不对MSSQL的支持,没办法一条命令就装好了。而微软已经拥抱开源了,Linux版本DotNET framework,Linux版本SQL Server,Windows 10上的Linux Subsystem,Windows的新Terminal,微软Azure上的一堆Linux服务器,MacOS上的VSCode,微软技术栈都提供了Linux支持。因此这里可以为PHP安装SQL Server模块。

下边开始操作。

二、安装PHP 8.2和Apache 2.x

环境在AWS上,选择EC2实例的Amazon Linux 2的AMI镜像。这个Amazon Linux 2是基于CentOS 7的发行版,又提供了额外的软件库。例如CentOS 7自带的PHP还是5.x系列,版本非常老,这里使用Amazon Linux自带的库可以自动安装7.x和8.x版本的PHP。

首先执行如下命令将OS版本升级到最新:(如果升级了内核请重启OS生效)

yum update -y

执行如下命令从Amazon Linux Extra软件库安装PHP 8.2:(本软件库为Amazon Linux 2专属)

amazon-linux-extras install php8.2

执行如下命令安装PHP包依存性包:

yum install httpd php-pdo php-xml php-pear php-devel re2c gcc-c++ gcc unixODBC-devel

三、安装PHP模块

执行如下命令安装:

pecl install sqlsrv
pecl install pdo_sqlsrv

整个过程自动的,如果前边都OK,不缺少包和库的话,不应该出错。

接下来执行如下命令修改PHP配置文件,将新编译好的库通过配置文件加载上。这里用到的/etc/php.d是配置文件目录,任何文件放进去,本目录是被整体include的。命令如下:

touch /etc/php.d/30-pdo_odbc.ini
echo 'extension=sqlsrv.so' >> /etc/php.d/30-pdo_odbc.ini
echo 'extension=pdo_sqlsrv.so' >> /etc/php.d/30-pdo_odbc.ini

最后重启服务生效。

systemctl restart php-fpm
systemctl restart httpd

四、验证测试

1、通过CLI验证

在CLI下执行如下命令:看加载生效的清单里边是否出现sqlsrvpdo_sqlsrv这两个扩展。

php -m

2、通过WEB服务验证

在Apache的Web服务目录下,默认是/var/www/html,在其中新建一个PHP文件,内容如下:

<?php
phpinfo();
?>

将此文件保存为index.php,然后从浏览器上访问。如果访问结果中包含了sqlsrvpdo_sqlsrv这两个扩展,则表示安装成功。

至此PHP可以调用MSSQL了!去验证下代码吧!

五、安装SQL Server的Linux客户端sqlcmd(可选)

在Amazon Linux 2操作系统上,等价于CentOS7,执行如下命令:

curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo
yum install mssql-tools -y
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

以上安装过程会提示是否确认安装,以及提示是否接受微软的EULA。输入YES同意即可完成安装。

接下来可使用如下命令验证sqlcmd已经安装好,并验证本机可以访问SQL Server。

sqlcmd -S mssql.cluster-cfv0psntfqnh.rds.cn-northwest-1.amazonaws.com.cn,1433 -U postgres -P password

登陆成功后,执行如下命令:

select @@VERSION;
GO

如果连接成功,则返回如下信息:

Babelfish for Aurora PostgreSQL with SQL Server Compatibility - 12.0.2000.8
Feb 21 2023 00:46:47
Copyright (c) Amazon Web Services
PostgreSQL 14.6 on x86_64-pc-linux-gnu (Babelfish 2.3.2)

(1 rows affected)

这表示本机是一台使用Babelfish技术的Aurora PostgreSQL提供SQL Server兼容支持。

执行如下命令创建数据库:

create database wordpress;
GO

至此SQL Server就准备好了。通过前文的配置,为PHP 8.2安装了SQL Server支持,又确认了SQL Server可以连接,接下来就可以使用Wordpress的网页界面执行初始化向导,来完成Wordpress后续部署工作了。

六、参考文档

使用SQL Server的Wordpress下载:

https://github.com/ProjectNami/projectnami

全文完。