linux版本:64位CentOS 6.4
Nginx版本:nginx1.8.0
php版本:php5.5.28
Sqlserver:2008
关于Linux环境安装Nginx+PHP参考《Linux环境Nginx安装与调试以及PHP安装 》即可。一般来说,PHP+mysql是最经典的组合,跑在Linux环境是非常好的,如果是PHP+Sqlserver是跑在windows环境下的。
今天需要Linux环境下PHP调用Sqlserver,用了一天的时间,终于把这个问题彻底研究清楚,网上其他类似文章我大都看了,其实有的是因为太久远不适用,有的有错误,还有的有几个关键问题没有说清楚,看此文其他可以忽略了,说真的踩坑真的很累,也没必要,照着这篇来做就是,所以本文才号称是全网最经典无错版,其实这么说主要是希望大家节省时间。
1.首先需要编译安装FreeTDS
说明:FreeTDS官网下载比较慢,可以从本人上传的这里一样很快下载:http://download.csdn.net/detail/21aspnet/8997397
# wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-patched.tar.gz
# tar -zxvf freetds-0.91.tar.gz
# cd freetds-0.91
需要注意的就是这里的--with-tdsver=7.1,这个非常重要,网上有的说是7.2,有的说是8.0,关于这个的问题可以看文末参考帖子
# ./configure --prefix=/usr/local/freetds --with-tdsver=7.1 --enable-msdblib
# make && make install
安装好会看到这样的信息:
配置FreeTDS
# cd ../
# echo "/usr/local/freetds/lib/" > /etc/ld.so.conf.d/freetds.conf
# ldconfig
验证FreeTDS
这一步非常重要,通过才可以继续,不然后面的步骤都是无意义的。
首先看看版本信息
# /usr/local/freetds/bin/tsql -C
如果前面配置的时候--with-tdsver=7.1如果写的是7.2和8.0或者其他都会这里TDS版本是5.0,原因见后面的参考信息中的帖子。
# /usr/local/freetds/bin/tsql -H 数据库服务器IP:XXX -p 1433 -U 用户名 -P 密码
或者直接
# /usr/local/freetds/bin/tsql -H 数据库服务器IP -p 1433 -U 用户名 -P 密码
关于freetds/etc/freetds.conf 下面可以参考线上可以不配置
重要说明:很多其他帖子写了需要配置/usr/local/freetds/etc/freetds.conf,另外需要注意的是etc下的freetds.conf不同于前面那个freetds.conf。
其实默认已经生成好了etc下的freetds.conf,其实这是多余的,不过配置了也没有问题。
如果配置了这里,那么PHP页面就可以使用这里的配置,不然PHP页面指定一样可以。
默认是这样的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
[
global
]
# TDS protocol version
; tds version = 4.2
# Whether
to
write a TDSDUMP file
for
diagnostic purposes
# (setting this
to
/tmp
is
insecure
on
a multi-
user
system)
; dump file = /tmp/freetds.log
; debug flags = 0xffff
# Command
and
connection
timeouts
; timeout = 10
;
connect
timeout = 10
# If you get
out
-
of
-memory errors, it may mean that your client
#
is
trying
to
allocate a huge buffer
for
a TEXT field.
# Try setting
'text size'
to
a more reasonable limit
text
size
= 64512
# A typical Sybase server
[egServer50]
host = symachine.domain.com
port = 5000
tds version = 5.0
# A typical Microsoft server
[egServer70]
host = ntmachine.domain.com
port = 1433
tds version = 7.0
|
修改[egServer70]为这样:
?
1
2
3
4
|
[egServer70]
host = 192.168.1.235 这个是数据库服务器IP
port = 1433
tds version = 7.1
|
其他都不用动,关于[egServer70]的名字也是随意的,这个就是给PHP调用的,一致即可。
3.添加PHP扩展mssql和pdo的pdo_dblib
说明:这2种扩展都可以达到相同的目的,选其一即可。
(1).增加PHP扩展mssql
# cd /usr/php-5.5.28/ext/mssql/
linux下用phpize给PHP动态添加扩展
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mssql=/usr/local/freetds/
# make && make install
(2).增加PHP扩展pdo的pdo_dblib 线上部署使用
# cd /usr/php-5.5.28/ext/pdo_dblib/ 此目录是php源文件版本文件目录下比如 lnmp/src/phpxxx/ext/pdo_dblib/
下面用phpize给PHP动态添加扩展
# [root@xxx pdo_dblib]# /usr/local/php/bin/phpize 执行,此目录是php生产环境下安装的具体目录
Configuring for:
PHP Api Version: 20121113
Zend Module Api No: 20121212
Zend Extension Api No: 220121212
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-dblib=/usr/local/freetds/
# make && make install
执行完成后会有一个提示目录,这个下面就是模块so目录
xxx/php/lib/php/extensions/no-debug-non-zts-20121212/
(3).在php.ini配置文件中增加.so
# cd /usr/local/php/etc下的php.ini
增加:
?
1
2
|
extension =
"mssql.so"
; extension=/path/to/extension/msql.so extension=xxx/php/lib/php/extensions/no-debug-non-zts-20121212/pdo_dblib.so 如果你只需要上述2种扩展之一,自然只要新增其中一个的.so扩展到php.ini即可。 |
(4).重启PHP FastCGI# killall php-fpm
# /etc/init.d/php-fpm
如果没有正确生成扩展是不能重启php-fpm的。
这时候在phpinfo里就可以看到扩展添加成功的信息了。