如何在ubuntu机器上安装oracle instantclient和pdo_oci?

我需要在Ubuntu机器上安装PDO_OCI,没有可以用apt-get安装的默认软件包。

有很多教程显示如何做,但是当我跟着他们,我有问题有关编译(configuration,制造,…)

在这里我做了什么:

  1. 我遵循这个教程来安装即时客户端

  2. 安装oci8

    pecl install oci8 

    我收到错误:

    错误:oci.h未find

  3. 安装PDO_OCI

     mkdir -p /tmp/pear/download/ cd /tmp/pear/download/ pecl download pdo_oci phpize ./configure –with-pdo-oci=instantclient,/usr,11.2 

    错误:

    找不到pdo_driver.h …

请你有任何严重的教程,完美的UBUNTU 12.04?

来自pecl install的PDO,PDO_OCI扩展已经过时了,因为最新的PHP版本已经内置了它的核心和安装,这些扩展通过这种方式失败了。

我已经花了很多时间来尝试做下面的几种方法,没有运气,最后自己找到一个干净的方式来做到这一点: 编译和安装从PHP源扩展

在编译过程中,也有一些技巧,我已经在我的个人博客中详细描述了这个过程: http : //itblog.study.land/how-to-install-php5-pdo_oci-oci8-and-other-扩展换的ubuntu /

这里列出了简短的步骤:

  1. 下载并安装Oracle即时客户端,然后导出ORACLE_HOME环境变量
  2. 下载&编译PDO_OCI(如果需要,还有OCI8)PHP源码包,你需要在这里应用一些技巧,包括:

    sudo ln -s /usr/include/php5/ /usr/include/php

    并编辑Makefile:

    EXTRA_INCLUDES = -I/usr/include/oracle/11.2/client64

  3. 启用扩展并重新启动Web服务器

这已经在Debian 7.6中测试过了

希望这可以帮助。

答案是这篇文章的复制(俄语),这反过来又根据这个职位和一些更正。 经过几天没结果的搜索,对我来说工作顺利。

先决条件:

你应该有管理员权限

你应该用以下软件包安装php5:

 sudo apt-get install php5 php5-dev php-pear php5-cli sudo pecl install pdo 

你应该安装libaio1库:

 sudo apt-get install libaio1 

安装Oracle Instant Client

从Oracle网站下载适用于您的处理器体系结构和操作系统的Oracle即时客户端(oracle.com/technetwork/database/features/instant-client/index-097480.html)。

对于Linux,有2种即时客户端选项:用于Linux,CentOS,Fedora,Red Hat Enterprise Linux,Mandriva Linux,SUSE Linux等的RPM软件包ZIP压缩文件 – 用于不支持RPM的所有其他软件。

有2个文件需要下载:

instantclient-basic – Oracle即时客户端本身

instantclient-sdk – 应用程序开发库的集合

为Oracle即时客户端创建目录(适用于软件扩展的/ opt目录适合于此目的):

 sudo mkdir -p /opt/oracle/ 

将下载的文件移动到/ opt / oracle并切换到目标文件夹(假设您将“zip”压缩文件下载到您的用户“downloads”目录中):

 sudo mv ~/downloads/instantclient-*.zip /opt/oracle/ cd /opt/oracle/ 

提取下载的档案:

 sudo unzip instantclient-basic-*-*.zip sudo unzip instantclient-sdk-*-*.zip 

最后,我们在/opt/oracle为Oracle Instant Client 11.2.0.2.0创建了instantclient_11_2目录。 将该目录重命名为instantclient (注意版本号)并切换到该目录:

 sudo mv instantclient_11_2 instantclient cd instantclient 

接下来我们将不得不创建几个额外的目录和符号链接(注意版本号):

 sudo ln -s /opt/oracle/instantclient/libclntsh.so.* /opt/oracle/instantclient/libclntsh.so sudo ln -s /opt/oracle/instantclient/libocci.so.* /opt/oracle/instantclient/libocci.so sudo ln -s /opt/oracle/instantclient/ /opt/oracle/instantclient/lib sudo mkdir -p include/oracle/11.2/ cd include/oracle/11.2/ sudo ln -s ../../../sdk/include client cd - sudo mkdir -p lib/oracle/11.2/client cd lib/oracle/11.2/client sudo ln -s ../../../ lib cd - 

创建包含要搜索Oracle即时客户端库的目录名称的配置文件并启用它:

 echo /opt/oracle/instantclient/ | sudo tee -a /etc/ld.so.conf.d/oracle.conf sudo ldconfig 

至于Ubuntu中没有目录/usr/include/php ,但客户端仍在搜索中,我们将创建符号链接它是相当的 – php5:

 sudo ln -s /usr/include/php5 /usr/include/php 

安装OCI8

之前的操作oci8扩展安装了pecl命令之后:

 sudo pecl install oci8 

系统会提示您输入Oracle即时客户端的路径,请回答:

 instantclient,/opt/oracle/instantclient 

创建扩展连接文件:

 echo "; configuration for php oci8 module" | sudo tee /etc/php5/conf.d/oci8.ini echo extension=oci8.so | sudo tee -a /etc/php5/conf.d/oci8.ini 

安装PDO_OCI

安装PDO_OCI从pear存储库(pear.php.net)下载。

更新梨包列表:

 sudo pecl channel-update pear.php.net 

下载并将档案放置到临时目录:

 sudo mkdir -p /tmp/pear/download/ cd /tmp/pear/download/ sudo pecl download pdo_oci 

提取存档内容:

 sudo tar xvf PDO_OCI*.tgz cd PDO_OCI* 

在这里,我们必须修改config.m4文件,因为它不包含我们版本的Oracle即时客户端的信息。 打开文件并添加标有“+”的更改(支付版本号):

 sudo vim config.m4 

以下是2个文件的diff

 *************** *** 7,12 **** --- 7,14 ---- if test -s "$PDO_OCI_DIR/orainst/unix.rgs"; then PDO_OCI_VERSION=`grep '"ocommon"' $PDO_OCI_DIR/orainst/unix.rgs | sed 's/[ ][ ]*/:/g' | cut -d: -f 6 | cut -c 2-4` test -z "$PDO_OCI_VERSION" && PDO_OCI_VERSION=7.3 + elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then + PDO_OCI_VERSION=11.2 elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.10.1; then PDO_OCI_VERSION=10.1 elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then *************** *** 119,124 **** --- 121,129 ---- 10.2) PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD) ;; + 11.2) + PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD) + ;; *) AC_MSG_ERROR(Unsupported Oracle version! $PDO_OCI_VERSION) ;; *************** 

使用phpize (php.net/manual/ru/install.pecl.phpize.php)命令准备PHP扩展的环境:

 sudo phpize 

配置软件包安装程序并安装软件包(请注意版本号):

 sudo ./configure --with-pdo-oci=instantclient,/opt/oracle/instantclient/,11.2 sudo make sudo make install 

为它创建连接文件:

 echo "; configuration for php PDO_OCI module" | sudo tee /etc/php5/conf.d/pdo_oci.ini echo extension=pdo_oci.so | sudo tee -a /etc/php5/conf.d/pdo_oci.ini 

重新启动apache并检查是否安装了扩展:

 sudo /etc/init.d/apache2 restart php -m 

本指南可能有助于从源代码编译pdo_oci模块,因为PECL版本现在已经过时了。 我为CentOS 6.6,PHP v5.3.3和Oracle Instant client v.12.1编写了原始文章 ,但应用起来也很容易。

安装PHP开发包

 $ apt-get install php-devel 

下载PHP源代码

 $ cd /usr/local/src $ mkdir php_source $ cd php_source/ $ wget http://museum.php.net/php5/php-5.3.3.tar.gz $ gunzip php-5.3.3.tar.gz $ tar xvf php-5.3.3.tar 

准备编译PDO_OCI

确保你有$ ORACLE_HOME环境变量集。 在我的情况下,它指向/usr/lib/oracle/12.1/client64

浏览到扩展源文件所在的文件夹:

 $ cd php-5.3.3/ext/pdo_oci 

由于我们正在运行一个Oracle客户端版本12.1,这个版本并不支持扩展,我们需要做一些黑客攻击。 我们的即时客户端版本号需要添加到config.m4文件,否则配置将失败,并出现以下错误消息

 Oracle版本...配置:错误:Oracle需要在/usr/lib/oracle/12.1/client64下找不到OCI8库

打开config.m4文件并查找SUPPORTED_LIB_VERS (第5行左右),将12.1添加到版本列表中。 还可以case $PDO_OCI_VERSION in找到case $PDO_OCI_VERSION in (可以是第134行),并将|12.1添加到下面的版本列表中。 保存文件,这就是我们所需要的。

准备,配置和扩展

 $ phpize $ ./configure $ make 

现在,make很可能会失败,抱怨找不到Oracle头文件,例如oci.h。 这是因为,除非以开发人员模式安装了Oracle服务器或即时客户端,否则这些文件在服务器上不存在。

转到oracle.com,即时客户端下载的Linux页面,并获得您的版本的即时客户端SDK包: 即时客户端下载的Linux

在我的情况下,我下载了这个文件: http : //www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

在您选择的任何位置解压文件。 我们需要的头文件在sdk / include文件夹中。 将所有这些文件复制到扩展的include文件夹中: /usr/local/src/php_source/php-5.3.3/ext/pdo_oci/include

现在制造应该通过:

 $ make 

作为最终结果,您将在扩展目录的/ modules子文件夹中获得编译的pdo_oci.so模块: /usr/local/src/php_source/php-5.3.3/ext/pdo_oci/modules/pdo_oci.so

移动并启用编译的模块

找出PHP存储在服务器上的扩展名

 $ php -i | grep extension_dir 

将扩展名(pdo_oci.so)复制到该目录。

现在有几种方法来启用模块。 一个是通过将其包含在主php.ini文件中,但在我的情况下,我创建了一个单独的.ini文件在其他模块的其他.ini文件所在的文件夹中,并在启动时包含在PHP中。

所以我创建了一个文件/etc/php.d/pdo_oci.ini ,内容如下:

 ; Enable pdo_oci extension module extension=pdo_oci.so 

或者,可以将相同的行添加到您的php.ini文件中。

重新启动Apache并检查

 $ /etc/init.d/httpd restart 

如果您安装了PHP CLI,您可以检查已加载模块的列表,否则在其中创建一个phpinfo()的PHP文件并检查输出。 如果在输出中看到了PDO_OCI,恭喜!

 $ php -m 

积分

感谢Mattias Geniar关于如何从源代码编译PHP扩展的原文: https ://ma.ttias.be/how-to-compile-and-install-php-extensions-from-source/

使用PECL进行安装不推荐,不要使用它。 下面是一个很好的教程一步一步如何在Linux机器上安装PDO_OCI和Oracle即时客户端: http ://shar.lt/linux-install-oracle-instant-client-php-pdo_oci-library/