背景
前两天写了一篇文章 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 扩展(php 的 mssql 扩展依赖于 freetds)
整体来讲和 OSX 安装扩展的步骤是一样的。
详细步骤
1、下载 freetds
依次执行以下脚本:
cd /usr/local/src/
wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-patched.tar.gz
tar -zxvf freetds-patched.tar.gz1
2
3
即,进入 /usr/local/src 目录(我一般习惯把编译用到的源代码放在这里),下载 freetds 的源码,然后解压。
2、安装 freetds
依次执行以下脚本:
cd freetds-1.2/
./configure --prefix=/usr/local/freetds --with-tdsver=7.4 --enable-msdblib
make && make install1
2
3
注意上面的 freetds-1.2,根据你自己下载的不同 freetds 版本,这里可能会有所不同,反正就是进入你解压出来得到的文件夹。然后 --with-tdsver=7.4 这里,根据 SqlServer 的不同版本灵活选择,具体可以参考下图自行选择,我使用的是 SqlServer 2012,所以选择的 7.4 版本:

以上版本选择的内容来自
freetds的官方文档,文档地址:https://www.freetds.org/userguide/ChoosingTdsProtocol.html
3、配置 freetds
依次执行以下命令来初始化 freetds 配置:
echo "/usr/local/freetds/lib/" > /etc/ld.so.conf.d/freetds.conf
ldconfig1
2
其他的配置不需要,网上有一些教程写要在 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: yes1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
执行以下命令来测试 freetds 连接:
# /usr/local/freetds/bin/tsql -H example.com -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)1
2
3
4
5
6
7
8
9
10
11
12
13
其中 example.com 是 MSSQL 的 host 地址, username 和 password 分别是 MSSQL 的用户名和密码。
5、下载 PHP-5.6.40 源码
依次执行以下脚本:
cd /usr/local/src/
wget https://www.php.net/distributions/php-5.6.40.tar.gz
tar -zxvf php-5.6.40.tar.gz1
2
3
和上面下载 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 install1
2
3
4
上面的 /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/1
2
3
4
5
7、修改 php.ini
这里在哪里修改大家就随意了,我就直接用宝塔前端修改了,没用命令行。在 php.ini 中添加如下几行:
[mssql]
extension=mssql.so1
2
修改完成之后保存,然后重启 php 服务。
查看 phpinfo,可以看到 mssql 扩展已经启用了。

大功告成。
后记
最近几天没少折腾环境,之前还试过在 Windows Server 如何安装 php 的 mssql 扩展,后来因为 php 的版本原因放弃了。
其实官方早在 2018年12月31日 就已经结束了对 php-5.6 的支持,而微软官方也提供了更好用的 PHP-Sqlsrv 扩展来让 php 使用 mssql(*nix 系统要求 php 版本 7+),我这边由于特殊原因不方便切换 php 版本,最后只能选择了 freetds + php-5.6 的环境来实现。
如果大家有条件的话,推荐还是使用 PHP7+ 比较好,官方的支持也更好一点。
我这里把解决问题的过程和思路记录在这里,一个是帮助自己整理一下最近的工作内容,再有一个也是方便后来人因为特殊原因接触到这些 上古环境,也算是给大家一个参考吧。
最近几天,前前后后,开发测试生产,Linux,osx,windows,windows server,php-mssql 扩展安装了不下 10 次,想想觉得自己挺牛的。
话说 CSDN 竟然支持表情符号,有点厉害。
后后记
关于文中提到的两个资源,freetds 源码和 php-5.6.40 源码,由于特殊原因,可能在国内下载的速度会比较慢, 也可能无法正常下载,我这里提供两个已经下载好的文件,有需要的同学可以自行拿取。
来自 https://blog.csdn.net/zhyl8157121/article/details/107237604
https://cloud.tencent.com/developer/article/1858518
