【问题标题】:OCI8 extensions load in CLI but not browserOCI8 扩展在 CLI 中加载,但在浏览器中不加载
【发布时间】:2011-03-10 01:23:11
【问题描述】:

我们和这个人几乎有同样的问题:

OCI8 functions not found when run by apache with php5

他们的问题和我们的不同之处在于我们只有一个 php.ini (/etc/php.ini)。我们在 CentOS 5.5 上运行 PHP 5.3.5 和 Apache 2.2.3。正如你所看到的,他们的问题从未得到真正的回答,但我希望你们都可以帮助我们的问题。谢谢!

【问题讨论】:

    标签: php apache centos selinux oci8


    【解决方案1】:

    我找到了问题的原因,但我不知道如何永久解决它。显然,我们的测试服务器使用的 SELinux 设置为“强制”。将其设置为“Permissive”允许 Apache/PHP 运行 oci8 扩展。但是,我的老板希望 SELinux 重新设置为“强制执行”,对此我不怪她。我将研究为 Oracle/oci8 创建一个例外。

    【讨论】:

    • 感谢您在此处澄清问题。如果您确实找到了一个好的、永久的解决方案……请务必发布详细信息,以帮助可能遇到相同问题的其他人。
    【解决方案2】:

    回复。作为 Apache 模块运行时的 SELinux 和 OCI8

    来自http://old.nabble.com/php-with-oci8-td16460446.html的建议解决方案

    您可以使用 audit2allow 自定义策略以允许此访问

    # grep http /var/log/audit/audit.log | audit2allow -M myhttp 
    # semodule -i myhttp.pp 
    

    这应该允许您使用 SELinux 运行这些 oracle 应用程序以强制执行 模式。

    oracle forums 上也有一个关于此的主题

    【讨论】:

    • php.net 上的安装指南说“如果 Oracle 数据库与 PHP 在同一台机器上,则数据库软件已经包含必要的库”。但是,就我而言,当我排除 Oracle Instant Client 时,即使 PHP 和 Oracle 驻留在同一台机器上,oci8 也只能在命令模式下工作,但无法在 apache 中加载。包括客户端为我解决了这个问题。
    【解决方案3】:

    确保您在 Apache 环境变量中有 ORACLE_HOME、ORACLE_SID 和 LD_LIBRARY_PATH。请记住,Apache 是作为守护程序运行的,因此它不一定可以访问与从命令行运行 PHP 脚本时相同的环境变量。

    ORACLE_HOME=/u01/app/oracle/product/10.1
    ORACLE_SID=orcl
    export ORACLE_HOME ORACLE_SID
    export LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${LD_LIBRARY_PATH}
    

    根据您的数据库服务器的位置和连接方式,您可能还需要设置 TWO_TASK 或 TNS_ADMIN。为确保使用正确的字符集,您可能还需要设置 NLS_LANG。

    编辑

    我通常从源代码构建 PHP,所以我可以完全控制:

    假设服务器上运行的是标准的Oracle Client,那么我的./configure 包括:

    --with-pdo-oci=$ORACLE_HOME
    

    有几次我需要为 Oracle 即时客户端构建时,我使用过

    --with-pdo-oci=instantclient,/usr,10.2.0.3
    

    在我的 ./configure 行中

    请注意,我使用的是 PDO_OCI 而不是 OCI8,但 ./configure 应该类似

    我在部署到新服务器时采取的另一个步骤是确保 apache 用户/组(由 httpd.conf 中的用户和组指令定义...我的 apache 作为用户“守护程序”运行)将对ORACLE_HOME下的文件有读取和执行权限

    【讨论】:

    • 谢谢。我设置了 LD_LIB_PATH,但没有设置 ORACLE_ vars。我会看看这是否能解决问题。
    • 好的,我设置了这些变量,但 oci8 仍然没有加载到浏览器中。
    • 根据手册,我不需要 ORACLE_ vars。 php.net/manual/en/oci8.installation.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多