因項目須要在linux下進行php5.3的oracle客戶端編譯,簡要介紹一下步驟及走過的彎路。php
1.下載Oracle客戶端程序包,其中包含OCI、OCCI和JDBC-OCI等相關文件。html
1.1下載文件地址linux
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.htmlweb
根據操做系統的版本選擇對應的軟件,我須要的是X86_64選擇sql
Instant Client for Linux x86-64數據庫
1.2須要下載的文件以下:apache
oracle-instantclient11.1-basic-11.1.0.7.0-1.x86_64.rpmcentos
oracle-instantclient11.1-devel-11.1.0.7.0-1.x86_64.rpm服務器
oracle-instantclient11.1-sqlplus-11.1.0.7.0-1.x86_64.rpmoracle
須要強調的一點是這裏須要註冊一個oracle的帳戶才能正常下載。
2.安裝Oracle客戶端程序包。
將程序包上傳到服務器指定目錄裏
chmod +x *.rpm
#給RPM包賦執行權限
rpm -ivh oracle-instantclient11.1-basic-11.1.0.7.0-1.x86_64.rpm oracle-instantclient11.1-devel-11.1.0.7.0-1.x86_64.rpm oracle-instantclient11.1-sqlplus-11.1.0.7.0-1.x86_64.rpm
#安裝RPM包
echo "/usr/lib/oracle/11.1/client64/lib/" > /etc/ld.so.conf.d/oracle_client.conf
#將庫路徑加到默認加載中
/sbin/ldconfig
#從新加載動態連接庫
3.安裝OCI8的php擴展(這裏指定php的安裝路徑爲/usr/local/webserver/php)
yum install libaio
#yum安裝libaio庫,libaio是Linux下的一個異步非阻塞接口,它提供了以異步非阻塞方式來讀寫文件的方式,讀寫效率比較高
wget http://pecl.php.net/get/oci8-1.4.10.tgz
#下載OCI擴展
tar zxvf oci8-1.4.10.tgz
#解壓
cd oci8-1.4.10
/usr/local/webserver/php/bin/phpize CFLAGS="-I/usr/lib/oracle/11.1/client64" CXXFLAGS="-I/usr/lib/oracle/11.1/client64"#使用phpize準備 PHP 外掛模塊的編譯環境,會根據指定的環境變量生成編譯時須要的makefile,phpize是屬於php-devel的內容,因此centos下只要運行yum install php-devel進行安裝便可
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-oci8=/usr/lib/oracle/11.1/client64
make
make install#編譯,安裝
須要強調的是make的時候會報錯,顯示各類找不到庫文件,須要對makefile文件進行修改加入oralce的運行庫地址
打開makefile,尋找INCLUDE,形式以下:
INCLUDES = -I/usr/local/php/include/php -I/usr/include/oracle/10.2.0.3/client
而後在末尾加上="-I/usr/lib/oracle/11.1/client64,而後從新make就會成功了。
4.修改PHP.ini(/usr/local/webserver/php/etc/php.ini)
在extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"後增長一行:
extension = "oci8.so"
5.重啓apache讓OCI生效
6.在web目錄下建立phpinfo.php文件在其中輸入一下內容,並經過web訪問
<?php
phpinfo();
?>
若是找到OCI8的部分就說明OCI安裝正常了,以下圖所示
接下來就能經過php訪問oracle數據庫了,須要注意的是php下Oracle的鏈接字符串
<?php
$username='***';
$passwd='***';
$protocol='TCP';
$SERVICE_NAME='***';
$ORACLE_SERVER_IP_ADDRESS='***.***.***.***';
$Port='1521';$db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = $protocol)(HOST = $ORACLE_SERVER_IP_ADDRESS)(PORT = $Port)))(CONNECT_DATA=(SID=$SERVICE_NAME)))";
$conn = oci_connect($username,$passwd, $db);
PutEnv("NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8");
if (!$conn) {$e = oci_error();
print htmlentities($e['message']);
exit;
}else {
echo "鏈接oracle成功!";
return $conn;
}?>
做者: 付海軍
出處:http://fuhj02.blog.51cto.com
版權:本文版權歸做者和51cto共有
轉載:歡迎轉載,爲了保存做者的創做熱情,請按要求【轉載】,謝謝
要求:未經做者贊成,必須保留此段聲明;必須在文章中給出原文鏈接且保證內容完整!不然必究法律責任!
我的網站: http://www.fuhaijun.com/