背景

前两天写了一篇文章 OSX MAMP 如何为 PHP 5.6 安装 MSSQL 扩展,讲的是自己的个人电脑,也就是开发环境如何为 PHP 5.6 安装 MSSQL 扩展,现在要上生产了,继续讲讲怎么给 CentOS7 安装 PHP - MSSQL 扩展。

运行环境

操作系统

  • CentOS Linux release 7.8.2003 (Core)

集成环境

  • 宝塔
  • PHP 5.6.40

步骤

和之前一样,我们先来整理一下整体的步骤:

1、安装 freetds
2、安装 mssql.so 扩展(phpmssql 扩展依赖于 freetds

整体来讲和 OSX 安装扩展的步骤是一样的。

详细步骤

1、下载 freetds

依次执行以下脚本:

cd /usr/local/src/
wget ftp://ftp.freetds/pub/freetds/stable/freetds-patched.tar.gz
tar -zxvf freetds-patched.tar.gz

即,进入 /usr/local/src 目录(我一般习惯把编译用到的源代码放在这里),下载 freetds 的源码,然后解压。

2、安装 freetds

依次执行以下脚本:

cd freetds-1.2/
./configure --prefix=/usr/local/freetds --with-tdsver=7.4 --enable-msdblib
make && make install

注意上面的 freetds-1.2,根据你自己下载的不同 freetds 版本,这里可能会有所不同,反正就是进入你解压出来得到的文件夹。然后 --with-tdsver=7.4 这里,根据 SqlServer 的不同版本灵活选择,具体可以参考下图自行选择,我使用的是 SqlServer 2012,所以选择的 7.4 版本:

以上版本选择的内容来自 freetds 的官方文档,文档地址:https://www.freetds/userguide/ChoosingTdsProtocol.html

3、配置 freetds

依次执行以下命令来初始化 freetds 配置:

echo "/usr/local/freetds/lib/" > /etc/ld.so.conf.d/freetds.conf
ldconfig

其他的配置不需要,网上有一些教程写要在 freetds.conf 中配置 MSSQL 的连接信息。其实大可不必,在调用的时候配置就可以了,也就是在 PHP 代码中配置,这样多灵活。

4、测试 freetds

执行以下命令来查看 freetds 版本:

# /usr/local/freetds/bin/tsql -C
Compile-time settings (established with the "configure" script)
                            Version: freetds v1.2
             freetds.conf directory: /usr/local/freetds/etc
     MS db-lib source compatibility: yes
        Sybase binary compatibility: no
                      Thread safety: yes
                      iconv library: yes
                        TDS version: 7.4
                              iODBC: no
                           unixodbc: no
              SSPI "trusted" logins: no
                           Kerberos: no
                            OpenSSL: yes
                             GnuTLS: no
                               MARS: yes

执行以下命令来测试 freetds 连接:

# /usr/local/freetds/bin/tsql -H example -p 1433 -U username -P password
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> select @@version
2> go

Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
	Feb 10 2012 19:39:15
	Copyright (c) Microsoft Corporation
	Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)

(1 row affected)

其中 exampleMSSQLhost 地址, usernamepassword 分别是 MSSQL 的用户名和密码。

5、下载 PHP-5.6.40 源码

依次执行以下脚本:

cd /usr/local/src/
wget https://www.php/distributions/php-5.6.40.tar.gz
tar -zxvf php-5.6.40.tar.gz

和上面下载 freetds 一样,这里不再赘述。

6、安装 PHP-5.6.40-MSSQL 扩展

依次执行以下脚本:

cd php-5.6.40/ext/mssql/
/www/server/php/56/bin/phpize
./configure --with-php-config=/www/server/php/56/bin/php-config --with-mssql=/usr/local/freetds/
make && make install

上面的 /www/server/php/56/bin/ 路径,因为的在宝塔中使用的 php 的安装路径是这个,所以路径就写成这样,大家根据自己情况调整。

得到类似如下的输出,说明扩展安装完成了:

...
Build complete.
Don't forget to run 'make test'.

Installing shared extensions:     /www/server/php/56/lib/php/extensions/no-debug-non-zts-20131226/

7、修改 php.ini

这里在哪里修改大家就随意了,我就直接用宝塔前端修改了,没用命令行。在 php.ini 中添加如下几行:

[mssql]
extension=mssql.so

修改完成之后保存,然后重启 php 服务。

查看 phpinfo,可以看到 mssql 扩展已经启用了。

大功告成。

后记

最近几天没少折腾环境,之前还试过在 Windows Server 如何安装 phpmssql 扩展,后来因为 php 的版本原因放弃了。

其实官方早在 2018年12月31日 就已经结束了对 php-5.6 的支持,而微软官方也提供了更好用的 PHP-Sqlsrv 扩展来让 php 使用 mssql*nix 系统要求 php 版本 7+),我这边由于特殊原因不方便切换 php 版本,最后只能选择了 freetds + php-5.6 的环境来实现。

如果大家有条件的话,推荐还是使用 PHP7+ 比较好,官方的支持也更好一点。

我这里把解决问题的过程和思路记录在这里,一个是帮助自己整理一下最近的工作内容,再有一个也是方便后来人因为特殊原因接触到这些 上古环境,也算是给大家一个参考吧。

最近几天,前前后后,开发测试生产,Linuxosxwindowswindows serverphp-mssql 扩展安装了不下 10 次,想想觉得自己挺牛的。😄

话说 CSDN 竟然支持表情符号,有点厉害。

后后记

关于文中提到的两个资源,freetds 源码和 php-5.6.40 源码,由于特殊原因,可能在国内下载的速度会比较慢, 也可能无法正常下载,我这里提供两个已经下载好的文件,有需要的同学可以自行拿取。

  • php-5.6.40.tar.gz.zip
  • freetds-patched.tar.gz

更多推荐

CentOS 7 如何为 PHP 5.6 安装 MSSQL 扩展