我们和这个人的问题几乎相同:
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。正如你所看到的,他们的问题从来没有得到真正的回答,但我希望你们都可以帮助我们。谢谢!
答案 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应用程序 模式。
上还有一个关于此问题的帖子答案 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
下的文件具有读取和执行权限