为PHP添加数据库模块

7月 9th, 2009 | Posted by | Filed under 程序设计

本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://www.penglixun.com/tech/program/add_database_module_for_php.html

今天为工作室部署协同办公平台OA,经过一些选择,最终选择了eGroupWare作为平台,感觉还比较不错,开源阵营的存在确实为咱们做IT的带来了不少便利。(我极少贡献代码,惭愧……)

然后开始部署,首先在自己的CentOS上部署比较顺利,一次成功,在Suse上部署的时候,因为老师事先装好的Apache/PHP环境我不熟悉,摸索了一阵,不过还是弄好了。
主要的问题就是把PDO_MySQL/PDO_OCI编译到PHP中。因为老师已经部署过了PHP,于是我采用外部扩展的方式添加PDO模块。
经我研究貌似PDO_$1.so和$1.so同时需要,缺一不可,不知道是不是只有eGroupWare这样,还是用了某种方式就会。因为我自己测试的时候,只有mysql.so也能连接成功数据库,请看到的高手为我解释下PDO_$1.so和$1.so的关系,3Q~

然后编译的过程遇到的一些问题,在这里记录下来。
首先编译OCI8,
1、下载Oracle即时客户端程序包 — Basic: 运行 OCI、OCCI 和 JDBC-OCI 应用程序所需的所有文件
①、打开以下网址(本文以32位版为例):
(Linux 32位版)http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html
②、下载以下几个文件:
oracle-instantclient11.1-basic-11.1.0.7.0-1.i386.rpm
oracle-instantclient11.1-devel-11.1.0.7.0-1.i386.rpm
oracle-instantclient11.1-sqlplus-11.1.0.7.0-1.i386.rpm

2、安装Oracle即时客户端程序包
#rpm -ivh oracle-instantclient11.1-basic-11.1.0.7.0-1.i386.rpm oracle-instantclient11.1-devel-11.1.0.7.0-1.i386.rpm oracle-instantclient11.1-sqlplus-11.1.0.7.0-1.i386.rpm
#echo “/usr/lib/oracle/11.1/client/lib/” > /etc/ld.so.conf.d/oracle_client.conf
#/sbin/ldconfig

3、安装OCI8 PHP扩展(使用PHP自带的OCI8,假设PHP程序安装在/usr/local/webserver/php/)
#yum install libaio
#wget http://pecl.php.net/get/oci8-1.3.5.tgz
#tar zxvf oci8-1.3.5.tgz
#cd oci8-1.3.5/
#/usr/local/webserver/php/bin/phpize
#CFLAGS=”-I/usr/include/oracle/11.1/client/”
#CXXFLAGS=”-I/usr/include/oracle/11.1/client/”
#./configure –with-php-config=/usr/local/php/bin/php-config –with-oci8=instantclient,/usr/lib/oracle/11.1/client/lib/
#make
#make install

4、修改PHP配置文件(/usr/local/webserver/php/etc/php.ini)
extension = “/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/oci8.so”

5、重启Apache

编译PDO_OCI,
1、安装 re2c
wget http://downloads.sourceforge.net/re2c/re2c-0.12.3.tar.gz
./configure
make
make install

2、安装 pdo_oci
wget http://pecl.php.net/get/PDO_OCI-1.0.tgz
tar xzvf PDO_OCI-1.0.tgz
cd PDO_OCI-1.0
/usr/local/php/bin/phpize

对刚安装的 oracle-instantclient11.1-basic 与 oracle-instantclient11.1-devel进行设置
ln -s /usr/include/oracle/11.1 /usr/include/oracle/10.2.0.1
ln -s /usr/lib/oracle/11.1 /usr/lib/oracle/10.2.0.1

./configure –with-pdo-oci=instantclient,/usr,10.2.0.1
注意,按网上的教程./configure –with-pdo-oci=instantclient,/usr/lib/oracle/11.1/client64,11.1
则会到/usr/lib/oracle/11.1/client64/lib/oracle/11.1/client/lib 下面去寻找oci.h等header文件, 所以只能是
./configure –with-pdo-oci=instantclient,/usr,11.1 但会报错 configure: error: Unsupported Oracle version! 11.1
所以最终只能是
./configure –with-pdo-oci=instantclient,/usr,10.2.0.1
同理/usr/lib/client64

3、 安装后生成pdo_oci.so在下面目录
/usr/local/php/lib/php/extensions/no-debug-non-zts-yyyymmdd/pdo_oci.so
移动它到/usr/local/php/lib/php/extensions/目录下
mv /usr/local/php/lib/php/extensions/no-debug-non-zts-yyyymmdd/pdo_oci.so ../

添加
extension = pdo_oci.so
extension = oci8.so

5)重新启动apache
/usr/local/apache/bin/apachectl restart

service httpd restart

目前还没有任何评论.