我需要在Ubuntu机器上安装PDO_OCI,没有可以用apt-get安装的默认软件包。
有很多教程显示如何做,但是当我跟着他们,我有问题有关编译(configuration,制造,…)
在这里我做了什么:
我遵循这个教程来安装即时客户端
安装oci8
pecl install oci8
我收到错误:
错误:oci.h未find
安装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 /
这里列出了简短的步骤:
ORACLE_HOME
环境变量 下载&编译PDO_OCI(如果需要,还有OCI8)PHP源码包,你需要在这里应用一些技巧,包括:
sudo ln -s /usr/include/php5/ /usr/include/php
并编辑Makefile:
EXTRA_INCLUDES = -I/usr/include/oracle/11.2/client64
启用扩展并重新启动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网站下载适用于您的处理器体系结构和操作系统的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扩展安装了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从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编写了原始文章 ,但应用起来也很容易。
$ apt-get install php-devel
$ 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
确保你有$ 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文件中。
$ /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/