【问题标题】:PHP, PEAR, and oci8 configurationPHP、PEAR 和 oci8 配置
【发布时间】:2013-11-11 08:31:21
【问题描述】:

我会尽快完成的。

我在 Fedora 19 系统上安装了 Oracle 11g(带有适当的数据库、用户等)、Apache 2.4.6 和 PHP 5.5.4。

我想将 PHP 连接到 Oracle。我真正想做的是下载MDB2_Driver_oci8,我认为这很容易,但是在我做这样的事情之前,PHP需要启用那个插件,所以这是我做的:

  • 尝试通过以下方式安装 oci8:pecl install oci8
  • 当最初几次都不能正常工作时,我发现出于某种原因,我需要“开发工具”——来自yum groupinstall "Development Tools"
  • 后来我发现PHP实际上并没有做oci8——它是PHP Devel。所以,我也必须通过yum install php-devel 安装它。
  • 然后,我终于安装了 oci8。它要求 Oracle 目录,就是这样。但它说的是:
    Configuration option 'php_ini' is not set to php.ini location
    You should add 'extensions=oci8.so' to php.ini

首先,我做了一个locate oci8.so - 在 /usr/lib64/php/modules/ 中找到它
其次,我将它告诉我的内容添加到 php.ini 文件中。
第三,我检查了通常的 php_info() 测试页面——没有提到 OCI8。哦哦。
第四,同时运行 php -i 和 php -m 将 oci8 列为模块之一。很奇怪。
无奈之下,我继续下载了MDB2_Driver_oci8。也许这会解决问题。没有。

当我加载我的 PHP 网页时,它返回以下内容:
错误消息:扩展 oci8 未编译为 PHP
以及:MDB2 错误:未找到

奇怪。然后我决定检查错误日志:
PHP 启动 - 无法加载动态库 '/usr/lib64/php/modules/oci8.so' - libclntsh.so.11.1: 无法打开共享对象文件: 在第 0 行的 Unknown 中没有这样的文件或目录

现在我被困住了。我尝试进入 php.ini,发现 extension_dir 被注释掉了。我把它放回去了,这似乎只是破坏了一些东西。

注意事项:

  • 我按照this (link) 指导如何配置 PHP 和安装 oci8。
  • ./configure --with-oci8 不起作用。 Fedora 说没有这样的目录
  • 由于网页文件和实际服务器位于同一台 PC 上,我没有安装 Oracle 客户端文件。
  • 默认情况下,php.ini 中的 extension_dir 已被注释掉。

这只是我在关于复制已经存在且正在工作但即将死去的设置的一长串问题中的一个问题。似乎每当我想解决问题时,我都必须先做X。通过做X,我发现了另一个问题,我必须通过做Y来解决这个问题,它有它自己的问题等等。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: php fedora oci8


    【解决方案1】:

    我知道这个问题有点老了 - 但我在这里写这个以防其他人来寻找解决方案。

    PHP 扩展目录

    要获取您的 PHP 扩展目录,请运行此命令

    php-config --extension-dir
    

    ORACLE 配置

    当您为 oracle 运行 config 命令时,您需要为其提供您的 Oracle 主目录(假设您已经安装了 ORACLE XE):

    ./configure -with-oci8=shared,$ORACLE_HOME/xe
    

    SELinux 政策

    您需要调整您的 SELinux 政策以支持您想要实现的目标。不建议完全禁用它。

    在您的 Fedora 系统上,尝试运行:

    which audit2allow
    

    如果你收到一个错误提示找不到audit2allow,那么你需要安装这个包:

    yum install policycoreutils-python
    

    一旦你有了这个包,你可以将你的审计日志文件传送到audit2allow,让它创建你的策略文件:

    grep httpd /var/log/audit/audit.log | audit2allow -m httpd > http.te
    

    这将创建文件http.te 供您阅读,以便您查看它将对您的 SELinux 配置进行的策略添加。如果您对修改没问题,则运行这些命令(注意以下命令中的大写 M 与之前的小写 m

    grep httpd /var/log/audit/audit.log | audit2allow -M httpd
    semodule -i httpd.pp
    

    这可能需要几秒钟才能运行 - 您可以通过运行验证策略是否已安装:

    semodule -l | grep httpd
    

    您需要重新启动 httpd 以便它可以尝试加载 oci8.so 插件

    service httpd restart
    

    HTH

    【讨论】:

      【解决方案2】:

      在网上查阅了很多资料,我找到了这个page,表示我应该禁用 SELinux,然后重新启动。

      成功了。

      【讨论】:

      • 禁用 SELinux 意味着关闭 Linux 上的一项主要安全功能。如果禁用 SELinux 可以解决问题,则说明您的机器配置错误。 Oracle 使用不正确的 SELinux 上下文打包了一些 RPM,因此我发现只需替换文件上的上下文即可解决此问题。
      猜你喜欢
      • 2016-09-20
      • 2013-10-17
      • 2021-12-13
      • 2016-04-27
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 2016-01-21
      相关资源
      最近更新 更多