OCI8扩展在CLI中加载,但不在浏览器中加载

时间:2011-03-07 21:05:41

标签: php apache centos selinux oci8

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

OCI8 functions not found when run by apache with php5

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

重新。 SELinux和OCI8作为Apache模块运行时

来自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

上还有一个关于此问题的帖子

答案 2 :(得分:0)

确保Apache envvars中有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客户端在服务器上运行,那么我的./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

下的文件具有读取和执行权限