设为首页 收藏本站
查看: 1078|回复: 0

[经验分享] Linux下PHP支持oracle,安装oracle instant client,pdo_oci笔记

[复制链接]

尚未签到

发表于 2018-9-8 07:04:58 | 显示全部楼层 |阅读模式
Linux下PHP支持oracle,安装oracle instant client,pdo_oci笔记
安装篇
  首先,PHP支持oracle我首先想到的是pdo相关驱动,看了一下还真有,叫做pdo_oci。
  但还依赖 oracle instant client ,这个要到oracle官网下载:
  http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
  选择对应系统的版本,点击进去,这里我的是64位linux,所以选择 Instant Client for Linux x86-64 ,之后会让你同意一个协议,叫做  Accept License Agreement ,勾选后就可以下载了。
  值得一提的是,如果要通过wget方式下载,你需要注册一个oracle账号并登陆,然后先在自己电脑上点击下载,得到一个实际url(包含一个token),复制这个url去服务器上wget,直接wget网页里的url是下不了的,切记。
  需要下载两个包:
  oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
  oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
  版本号可能不一样,看下关键词:basic 和 devel即可。
  这两个包下载到服务器上,分别安装:
rpm -ivh oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm  
rpm -ivh oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
  因为是64位系统,为了防止编译php扩展出问题,将刚刚安装好的两个目录做个软连接
ln -s /usr/lib/oracle/12.1/client64 /usr/lib/oracle/12.1/client  
ln -s /usr/include/oracle/12.1/client64 /usr/include/oracle/12.1/client
  ok,下一步就开始安装 pdo_oci扩展。
  首先你应该有一份php源码,如果没有,请到官网下载一份对应版本的。
  假设我的源码在 /home/src/php56
cd /home/src/php56  
cd ext/pdo_oci
  
phpize #注释:如果没有这个命令你需要找到php安装目录的bin/,如/usr/local/php/bin/phpize./configure --with-pdo-oci=instantclient,/usr,12.1 --with-php-config=/usr/bin/php-config#注:12.1需要对应上面安装的oracle instant的版本号,和oracle/12.1的数字一样,--with-php-config是和phpize同理,在php安装目录里的bin目录下,这两个要改成自己实际情况的。make && make install
  如果顺利的话,编译成功后,修改 php.ini ,在文件末尾空两行,加上
extension=pdo_oci.so;  好了,通过
php -m  命令看一下有没有PDO_OCI这一行,有的话就是ok了。
  web服务记得要重启apache或php-fpm。
使用篇
  使用过程跟pdo差不多,我对oracle还不是很了解,但是也遇到一个故障,那就是无法连接oracle。
  一开始通过下面的方式连接:
$pdh = new PDO('oci:dbname=IP地址:端口号/SID',用户名,密码);  报错:
SQLSTATE[HY000]: pdo_oci_handle_factory: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor  后来在statckoverflow上找到答案,改成下面这种连接方式:
$tns = "  
(DESCRIPTION =
  
    (ADDRESS_LIST =
  
      (ADDRESS = (PROTOCOL = TCP)(HOST = 你的IP)(PORT = 端口号))
  
    )
  
    (CONNECT_DATA =
  
      (SID = 你的oracle数据库的SID)
  
    )
  
  )
  
       ";$db_username = "youname";$db_password = "yourpassword";try{
  
    $conn = new PDO("oci:dbname=".$tns,$db_username,$db_password);
  
}catch(PDOException $e){
  
    echo ($e->getMessage());
  
}
  这样就没问题了。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-567321-1-1.html 上篇帖子: zabbix存储oracle-zabbix存储oracle-51CTO博客 下篇帖子: 关于oracle找回误删数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表