【原创】Linux下php使用adodb对sql Server访问配置
时间:2009-02-27 来源:nanlover
版本历史:
v.1.0, nanlovor, 2009/02/27, 创建
文档概要说明:
本文档主要说明了在linux下使用 php库 adodb 对sql server 进行访问时的配置说明。
相关文档:
1. 概述
linux下的php 对sqlserver存储过程的访问,有个比较严重的bug,就是如果想要同时获得 返回值和结果集时, linux下php提供的mssql扩展是有问题的。这影响了我们很多对原来神经系统功能向linux web 平台上的移植,也就是无法重用许多茂哥的存储过程。现在找到了一条途径,利用adodb 的接口,我自己封装了一套较为简单的接口, 可以在 linux 下对sqlserver存储过程 访问, 多返回值+多结果集情况均适用,能够正确返回。
2. freetds的安装
如果php要采用底层freetds访问sqlServer中多返回集和多返回值的存储过程,那么需要安装 freetds的0.82版本(原来我们采用的是freetds的0.64版本,在php调用sqlServer的多返回值+多返回集情况下是有问题的)
1、删除原来版本
如果已经安装有原来的 freetds-0.64,最好删除原有的版本
#cd freetds-0.64
#make uninstall
如果没有 原有的freetds-0.64的安装目录已经找不到了, 则直接
#mv /usr/local/freetds /usr/local/freetds-0.64 (假设原来freetds 安装在/usr/local/freetds 下)
2、安装新版本
# tar xvfz freetds-stable.tgz
# cd freetds-0.82
# ./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib
# make
# make install
(注意,以下操作很重要,否则,php会检测不到freetds的目录):由于PHP检测其安装目录的时候有些问题;因此,需要检查/user/local/freetds/lib/libtds.a 和 /usr/local/freetds/include/tds.h 两个文件是否存在,如果不存在,则
#touch /usr/local/freetds/lib/libtds.a
#touch /usr/local/freetds/include/tds.h
创建两个空文件。
3、配置freetds.conf
#vim /usr/local/freetds/etc/freetds.conf
增加
[serviceName] # 服务名
host = **.**.**.** #(数据库主机地址)
port = 1433
tds version = 8.0
client charset = GBK
4、如果原来的系统已经有了银联接口,那么就不需要重新编译php了,直接重新启动Apache 即可;
#service httpd restart
3.重新编译php,添加银联接口
1、 准备好银联给予的一个程序包 php.rar
银联接口使用环境:在linux环境下(内核版本号:2.6.20-1.2320.fc5smp),Apache2(版本号为:2.2.2), PHP5(版本号为:5.2.5)下尝试使用PHP页面调用成功。
我们提供如下文件:
2、在PHP的安装包解开的目录下(本例子为:php-5.2.5):
进入ext的目录,将chinapay.def复制到这个目录下,使用ext_skel来生成自动扩展的框架。
命令方式为:
#./ext_skel --extname=chinapay --proto=chinapay.def
3 修改ext/chinapay/目录下的config.m4文件,将如下内容的前面"dnl"删除,保存文件:
dnl PHP_ARG_ENABLE(chinapay, whether to enable chinapay support,
dnl Make sure that the comment is aligned:
dnl [ --enable-chinapay Enable chinapay support])
4 修改ext/chinapay/目录下的chinpay.c和php_chinapay.h文件。文件内容见样例。对于chinapay.php文件可以用来测试是否能够正常调用签名方法(在编译完成后可以使用:/usr/local/php-5.2.5/sapi/cli/php -f chinapay.php 来运行该PHP文件,验证是否成功)。
5 退到ext的上一层目录
6 使用./buildconf --force
7 使用命令:
#./configure --with-apxs2=/usr/sbin/apxs --with-mysql --with-zlib-dir --with-bz2 --with-libxml-dir --with-gd --with-ttf --enable-mbstring --enable-gd-native-ttf --with-jpeg-dir --with-png-dir --with-freetype-dir --with-oci8=/opt/oracle --without-sqlite --with-mssql=/usr/local/freetds --enable-chinapay --enable-soap
8 修改Makefile文件,找到EXTRA_LIBS,在最后加入 -L/usr/local/lib -lnpc
/usr/local/lib为libnpc.so所在的目录。
9 使用make
10 使用make install.
注意:make的时候如果仍然找不到libnpc.so的话,可以采取下面措施:进入到/etc/ld.so.conf.d下,写入一个名为chinapay.conf的文件,内容为/usr/local/lib。表示so的搜索路径。然后运行命令:ldconfig
4.adodb的安装和配置
将svn目录中的 include/db/adodb 整个目录放到php中配置的头文件目录下 例如
/var/www/html/include/db/
# cp -R adodb /var/www/html/include/db/
将 GenericAdoMssqlDB 放到 /var/www/html/include/db/ 中,该文件为对adodb接口的封装
# cp GenericAdoMssqlDB /var/www/html/include/db/