Centos下添加PHP对MSSQL的支持
时间:2014-10-08 01:22 来源:linux.it.net.cn 作者:it
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
1. 安装PHP的SQL Server驱动
1 yum search freetds
2 yum install freetds php-mssql
或者下载编译安装
1 [root@server ~]# wget ftp:
//ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
2 [root@server ~]# tar -zxvf freetds-stable.tgz
3 [root@server ~]# ./configure
4 [root@server ~]# make
5 [root@server ~]# make install
2.配置FreeTDS
打开 FreeTDS 配置文件(/etc/freetds.conf,如果是编译安装可能在其他位置),在配置文件末尾可以看到一些简单的配置案例,
1 [mybigserver]
2 host = dbserver.example.org
3 port = 1433
4 tds version = 7.0
"mybigserver"
是你的服务器的简称标识, 随便你怎么命名, 只要在使用的时候记得它就可以. host 和 port 就不用赘述了, 对于MS SQL SERVER , tds version 应该是 7.0 , 而 对于 Sybase ,tds version 应该是 5.0.
3. 测试能否链接到服务器
1 # ping 192.168.1.33
1 # telnet 192.168.1.33 1040
2 Trying 192.168.1.33...
3 Connected to 192.168.1.33.
4 Escape character is
'^]'
.
1 # tsql -H 192.168.1.33 -p 1040 -U my_mssql_username
2 locale is
"en_US.UTF-8"
3 locale charset is
"UTF-8"
4 Password: my_mssql_password
5 1>
use
<em>mydatabase</em>
6 2> select * from <em>mytable</em>
7 3> go
1 # tsql -S mybigserver -U my_mssql_username
2 locale is
"en_US.UTF-8"
3 locale charset is
"UTF-8"
4 Password: my_mssql_password
5 1>
如果能得到上面的运行结果,说明freetds运行正常。
4. 测试PHP是否正常链接
如果以上步骤都没有问题,下面代码测试PHP是否能正常链接:
view sourceprint?
1 <?php
2
$server
=
'mybigserver '
;
3
$link
= mssql_connect(
$server
,
'sa'
,
'phpfi'
);
4
if
(!
$link
) {
5
die
(
'Something went wrong while connecting to MSSQL'
);
6 }
7 ?>
这里,如果直接根据文档说明,使用mssql_connect(xxx,xxx,xxx)会得到一个让人抓不着头脑的错误消息“mssql_connect(): Unable to connect to server",这里主要是因为Centos系统开启了selinux,并且selinux默认阻止apache发起远程链接,可以执行如下命令解决:
1 setsebool -P httpd_can_network_connect=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CentOS 5.4 Linux 下的 PHP(FastCGI) 需要连接相关部门的SQL Server 2000数据库,配置了扩展FreeTDS扩展。
1、编译安装FreeTDS
mkdir
-p
/data0/software/
cd
/data0/software/
wget
ftp
:
//ftp
.ibiblio.org
/pub/Linux/ALPHA/freetds/stable/freetds-stable
.tgz
tar
zxvf freetds-stable.tgz
cd
freetds-0.82/ .
/configure
--prefix=
/usr/local/webserver/freetds
--with-tdsver=8.0 --
enable
-msdblib
make
&&
make
install
cd
../
echo
"/usr/local/webserver/freetds/lib/"
>
/etc/ld
.so.conf.d
/freetds
.conf
ln
-s
/usr/local/webserver/freetds/lib/libsybdb
.so.5.0.0
/usr/local/webserver/freetds/lib/libsybdb
.so.4
/sbin/ldconfig
rm
-f
/usr/local/webserver/freetds/etc/freetds
.conf
vi
/usr/local/webserver/freetds/etc/freetds
.conf
输入以下内容:
引用
[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 host = mssql.yourdomain.com port = 1433 tds version = 8.0 client charset = UTF-8
2、编译安装PHP自带MSSQL扩展
进入本地已存在的php-5.2.XX源码包目录:
cd
/data0/software/php-5
.2.XX
/ext/mssql/
/usr/local/webserver/php/bin/phpize
.
/configure
--with-php-config=
/usr/local/webserver/php/bin/php-config
--with-mssql=
/usr/local/webserver/freetds/
make
&&
make
install
3、在php.ini配置文件中增加mssql.so
vi
/usr/local/webserver/php/etc/php
.ini
增加一行:
引用
extension =
"mssql.so"
4、重启PHP FastCGI
/usr/local/webserver/php/sbin/php-fpm
restart
5、测试文件(test_mssql.php):
php header(
"Content-type: text/html; charset=utf-8"
); $msdb=mssql_connect(
"mssql.yourdomain.com:1433"
,
"username"
,
"password"
);
if
(!$msdb) {
echo
"connect sqlserver error"
;
exit
; } mssql_select_db(
"database_name"
,$msdb); $result = mssql_query(
"SELECT top 5 * FROM table"
, $msdb);
while
($row = mssql_fetch_array($result)) { var_dump($row); } mssql_free_result($result); ?>
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
30
31
32
33
34
35
36
37
38
39
40
41
Centos下添加PHP对MSSQL的支持
Leave a reply
其实很少会有连接SQL Server的机会,不过我们公司刚好有个应用需要使用的SQL Server的数据库,所以也知道给LNMP安装MSSQL的扩展。
搜索网上的相关文章一般的解决方案是Freetds,Freetds的主要功能就是让Linux系统可以访问SQL Server服务。
安装Freetds
Freetds 官方网站是 http:
//www
.freetds.org,可以去官方网站下载程序,文中下载的是0.92.79版本。
wget
ftp
:
//ftp
.freetds.org
/pub/freetds/stable/freetds-0
.92.79.
tar
.gz
然后解压,并且编译安装
tar
-zxvf freetds-0.92.79.
tar
.gz
cd
freetds-0.92.79
.
/configure
--prefix=
/usr/local/freetds
gmake
gmake
install
安装完成后可以使用命令测试下
/usr/local/freetds/bin/tsql
-S 192.168.0.10:1433 -U sa
安装PHP的MSSQL扩展
本服务器使用的是lnmp集成环境,php是5.3.21;如果是单独安装php的也一样;先进入下载加压后的PHP文件目录,然后编译安装
cd
/data/lnmp0
.9-full
/php-5
.3.21
cd
ext
/mssql
/usr/local/php/bin/phpize
.
/configure
--with-php-config=
/usr/local/php/bin/php-config
--with-mssql=
/usr/local/freetds
make
make
install
随后在php.ini中添加扩展
vim
/usr/local/php/etc/php
.ini
在最后加入一行
extension =
"mssql.so"
最后重启php即可
配置Freetds
vim
/usr/local/freetds/etc/freetds
.conf
在文件中加入以下语句
[sqlservername]
host = 192.168.0.10
port = 1433
tds version = 7.0
client charset = UTF-8
PHP中测试连接
新建一个php文件,放入以下代码
$conn = mssql_connect(
"sqlservername"
,
"sa"
,
"password"
) or die (
"无法连接"
);
echo
$conn;
现在你的php已经完全支持连接SQL Server了。
//demo
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-mssql=/usr/local/freetds
/usr/local/webserver/php/bin/phpize
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/
1
2
3
4
5
6
7
8
9
10
TDSVER=7.0 /usr/local/freetds/bin/tsql -H ip -p 1433 -U user -P password
[myserver] host = ip port = 1433 tds version = 7.2 client charset = utf8
$result
= mssql_query(
"SELECT top 5 * FROM article"
,
$conn
);
while
(
$row
= mssql_fetch_array(
$result
)) {
var_dump(
$row
);
}
mssql_free_result(
$result
);
(责任编辑:IT)
//demo ./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-mssql=/usr/local/freetds
/usr/local/webserver/php/bin/phpize
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/
(责任编辑:IT) |