我对OCI8模块有问题,它不会加载。
OS是Ubuntu 16,Apache 2.4和Php 5.6
我执行以下步骤:
- 我下载了Oracle Instant Client Basic和SDK软件包:(Oracle-InstantClient11.2-Basic-11.2.0.4.4.0-1.x86_64.rpm,Oracle-InstantClient11.2-devel-11.2.0.4.0.4.0-1.x86_64.rpm)
- 安装了Oracle Instant Client(将.rpm转换为.deb之后)
- 从PECL(OCI8-2.0.12)下载了OCI8扩展
- 构建PHP OCI8模块
- 复制OCI8.SO到模块目录(/usr/lib/php/php/20131226/)
- 编辑的php.ini文件并添加完整路径的扩展名(Extension =/usr/lib/php/php/20131226/oci8.so)
- 在环境变量ld_library_path =/usr/lib/oracle/oracle/11.2/client/lib
- 然后,重新启动Apache Web服务器
未加载模块,Apache日志显示以下错误:
无法加载动态库'/usr/lib/php/20131226/oci8.so' - libaio.so.1:无法打开共享对象文件:没有这样的文件或目录在第0行中未知
问题来自libaio。
我从@codo找到了问题:https://stackoverflow.com/a/10619763/1995358
安装libaio.so库后解决的问题再次:
sudo apt-get install libaio1
确保在Apache找到它的位置设置LD_LIBRARY_PATH,可能是Apache的Envvars文件。或者,如果机器上没有其他Oracle软件,则可以更新LDCONFIG。免费的地下PHP&甲骨文手册
有几个问题:为什么不使用12.1即时客户端?这样,您可以连接到Oracle DB 10.2及以后。
另外,为什么要将RPMS转换,然后将输出移至用户目录?为什么不简单地下载即时客户端zip文件并解压缩它们呢?您需要做的就是添加下载页说明中提到的SYM链接。
我创建了文件etc/apache/envvars在那儿,我写道:导出ld_library_path =/usr/lib/oracle/oracle/11.2/client64/lib导出ORACLE_HOME =/usr/lib/oracle/11.2/client64
那么,重要的是,apache是如何重新列出的(在我的情况下,系统cttl重新启动不起作用)。我做到了:apache2ctl停止apache2ctl start
...一切都很好。