2

我已经从 Mac OS X (Intel x86) 的 Instant Client 下载中下载了 Instant client 10.2.0.4 basic 和 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 下的包含目录中

当我尝试使用命令配置为...

./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

有人可以帮我解决这个错误吗?

4

4 回答 4

5

我们最近不得不在 CentOS 机器上安装它,所以路径可能有点不同。此外,我们使用了预编译的 PHP 实例,并将 OCI8 函数添加为单独的模块。在使用 CentoOS 之前,我们使用这些说明安装到我们的 Mac 工作站(它们有点过时,所以我不知道这是否仍然适用于当前版本的 OS X 和 PHP):http ://articles.serenity.de /compile_php_with_oracle/

对于我们的 CentOS 安装,我们必须执行以下操作:

  • 在没有即时客户端支持的情况下安装/编译 PHP 5.4。

  • 获取 InstantClient 基本包和 SDK 包并安装它们(看起来您已经拥有这两个包)。

  • 当 OCI 配置脚本声称它太笨而无法找到标头时,这并不是讽刺,因此您必须设置一个老鼠窝的符号链接。在 CentOS 上,基本客户端安装在 /usr/lib/oracle/10.2.0.3/client64 中,SDK 文件在 /usr/include/oracle/10.2.0.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_entry 以便正确编译:
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 安装。如果您仍然遇到问题,您可以查看配置并制作脚本以查看您的系统需要哪些目录和符号链接。当布拉德说这需要几天时间才能弄清楚时,他说的是字面意思。希望它可以帮助您更快地工作。

于 2013-12-03T15:36:32.920 回答
1

我已经能够通过以下更改安装 PDO_OCI 模块(可能不是最完美的解决方案,但可以正常工作)..

i) 通过查看配置脚本 /usr/lib/oracle//client/ 在特定文件夹结构中安装 InstantClient 和 SDK 模块 您还可以将 InstantClient 提取到 usr/include 下的类似结构中。

ii) 修改 config.m4 脚本以将 function_entry 替换为 zend_function_entry

iii) 将所有头文件放在 oracle 主目录的包含目录中

iv) 为 *.dylib 创建了符号链接。模块到 *.dylib 例如:ln -s libclntsh.dylib.10.1 到 libclntsh.dylib 请注意库文件中的版本应该与要创建的文件夹相同

所有这些都是通过查看 PDO_OCI 提取的 config.m4 脚本发现的

于 2013-12-04T20:48:26.013 回答
0

即使 ORACLE_HOME 设置正确,我也经常遇到此错误,因此在 PDO_OCI-1.0 目录中运行配置之前给出了导出

导出 ORACLE_HOME=/opt/instantclient_10_2/

于 2015-11-20T08:50:38.973 回答
-2

也许这只是一个自动配置问题。我从源代码编译了最后一个并且运行良好。我创建一个帖子只是为了解释正确的程序。

于 2015-10-22T22:17:59.603 回答