我已经从适用于Mac OS X(Intel x86)、的Instant client下载中下载了Instant client 10.2.0.4基本文件和sdk zip文件
我提取到如下所示的文件夹中
-rw-r--r--@ 1 MNV_Kishore 1000 278 Apr 1 2009 BASIC_README
-r--r--r--@ 1 MNV_Kishore 1000 1609607 Feb 2 2008 classes12.jar
-rwxr-xr-x@ 1 MNV_Kishore 1000 34168 Apr 1 2009 genezi
lrwxr-xr-x 1 MNV_Kishore wheel 20 Dec 2 18:10 libclntsh.dylib -> libclntsh.dylib.10.1
-rwxr-xr-x@ 1 MNV_Kishore 1000 25582048 Mar 31 2009 libclntsh.dylib.10.1
-rwxr-xr-x@ 1 MNV_Kishore 1000 2062528 Mar 3 2009 libnnz10.dylib
lrwxr-xr-x 1 MNV_Kishore wheel 18 Dec 2 18:10 libocci.dylib -> libocci.dylib.10.1
-rwxr-xr-x@ 1 MNV_Kishore 1000 1277896 Mar 3 2009 libocci.dylib.10.1
-rwxr-xr-x@ 1 MNV_Kishore 1000 72626768 Apr 1 2009 libociei.dylib
-rwxr-xr-x@ 1 MNV_Kishore 1000 118672 Mar 25 2009 libocijdbc10.dylib
-rwxr-xr-x@ 1 MNV_Kishore 1000 118672 Mar 25 2009 libocijdbc10.jnilib
-r--r--r--@ 1 MNV_Kishore 1000 1555682 Feb 2 2008 ojdbc14.jar
drwxr-xr-x@ 7 MNV_Kishore wheel 238 Apr 1 2009 sdk
所有头文件.h都存在于sdk 下的include目录中
当我尝试将命令配置为…时
./configure --with-pdo-oci=instantclient,/usr/local/instantclient_10_2,10.2.0.4
遇到以下错误
checking for oci.h... configure: error: I'm too dumb to figure out where the include dir is in your instant client install
有谁能帮我纠正这个错误吗?
我们最近不得不在一个CentOS盒子上安装这个,所以路径可能有点不同。此外,我们使用了一个预编译的PHP实例,并添加了OCI8函数作为一个单独的模块。在使用CentoOS之前,我们使用以下说明安装到Mac工作站(它们有点过时,所以我不知道这是否仍然适用于当前版本的OS X和PHP):http://articles.serenity.de/compiling_php_with_oracle/
对于我们的CentOS安装,我们必须执行以下操作:
-
在没有即时客户端支持的情况下安装/编译PHP 5.4。
-
获取instantClient基本包和SDK包并安装它们(看起来您已经同时拥有了这两个包)。
-
当OCI配置scirpt声称它太笨了,找不到标题时,这并不是讽刺,所以你必须建立一个符号链接的老鼠窝。在CentOS上,基本客户端安装在/usr/lib/orace/10.2.0.3/client64中,SDK文件安装在/usr/include/orace/10.20.3/client64/中。
cd /usr/lib/oracle/10.2.0.3/client64 cp /usr/include/oracle/10.2.0.3/client64/* . ln -s lib/libnnz10.so libnnz.so ln -s lib/libclntsh.so.10.1 libclntsh.so ln -s lib/libnnz10.so libnnz10.so ln -s lib/libclntsh.so.10.1 libclntsh.so.10.1
- 现在您可以从pecl安装OCI8。请注意,此时PDO_OCI将不起作用。这仅适用于OCI8驱动程序:
pecl install oci8
- 对于PDO_OCI支持,您还需要添加更多符号链接:
cd /usr/lib/oracle/10.2.0.3/client64 mkdir sdk cd sdk && ln -s /usr/include/oracle/10.2.0.3/client64 include ln -s /usr/lib/oracle/10.2.0.3/client64/sdk/include/ /usr/lib/oracle/10.2.0.3/client/include ln -s /usr/lib/oracle/10.2.0.3/client64/ /usr/lib/oracle/10.2.0.3/client ln -s /usr/include/oracle/10.2.0.3/client64/ /usr/include/oracle/10.2.0.3/client
- PDO OCI已经好几年没有维护了,所以它不会直接从pecl安装。相反,您必须下载它并进行一些更改。sed命令将function_entry更新为zend_function_entr,以便正确编译:
pecl download pdo_oci tar -xvf PDO_OCI-1.0.tgz cd PDO_OCI-1.0 sed -i -e 's/function_entry pdo_oci_functions/zend_function_entry pdo_oci_functions/' pdo_oci.c mkdir include ln -s /usr/include/php include/php phpize cp /usr/include/oracle/10.2.0.3/client64/* ./include ./configure --with-pdo-oci=instantclient,/usr,10.2.0.3 make && make install
此时,PDO_OCI应该可以与您的PHP安装配合使用。如果您仍然有问题,您可以查看configure和make scirpts,看看您的系统需要哪些目录和符号链接。布拉德说这件事花了好几天时间才弄清楚。希望它能帮助你更快地工作。
我已经能够安装PDO_OCI模块,并进行了以下更改(可能不是最完美的解决方案,但它可以工作)。。
i) 通过查看配置脚本,在特定文件夹结构中安装InstantClient和SDK模块/usr/lib/oracle//客户端/您还可以将instantclient提取到/usr/include..下的类似结构中。。
ii)修改了config.m4脚本,将function_entry替换为zend_function_entry
iii)将所有头文件放在oracle主目录的include目录中
iv)为*.dylib.modules创建了到*.dylib的符号链接例如:ln-s libclntsh.dylib 10.1到libclntsh.dylib请注意,库文件中的版本应与要创建的文件夹相同
所有这些都是通过查看PDO_OCI提取的config.m4脚本发现的
即使ORACLE_HOME设置正确,我也会收到这个错误,所以在PDO_OCI-1.0目录中运行配置之前进行了导出
导出ORACLE_HOME=/opt/instantclient_10_2/
也许这只是一个autoconf问题。我从源代码编译了最后一个,并且运行得很好。我创建一个帖子只是为了解释正确的程序。