Php OCI8扩展在CLI中加载,但不在浏览器中加载
我们的问题与此人几乎相同:Php OCI8扩展在CLI中加载,但不在浏览器中加载,php,apache,centos,selinux,oci8,Php,Apache,Centos,Selinux,Oci8,我们的问题与此人几乎相同: 他们的问题和我们的问题之间的区别在于我们只有一个php.ini(/etc/php.ini)。我们正在CentOS 5.5上运行PHP5.3.5和Apache2.2.3。正如你们所看到的,他们的问题从未得到真正的回答,但我希望你们能帮助我们解决这个问题。谢谢 确保在Apache envvars中有ORACLE_HOME、ORACLE_SID和LD_LIBRARY_路径。请记住,Apache是作为守护进程运行的,因此它不一定能够访问与从命令行运行PHP脚本时相同的环境变
他们的问题和我们的问题之间的区别在于我们只有一个php.ini(/etc/php.ini)。我们正在CentOS 5.5上运行PHP5.3.5和Apache2.2.3。正如你们所看到的,他们的问题从未得到真正的回答,但我希望你们能帮助我们解决这个问题。谢谢 确保在Apache envvars中有ORACLE_HOME、ORACLE_SID和LD_LIBRARY_路径。请记住,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客户端正在服务器上运行,则my./configure包括:
--with-pdo-oci=$ORACLE_HOME
有几次我需要为Oracle即时客户端构建时,我使用了
--with-pdo-oci=instantclient,/usr,10.2.0.3
在我的./configure行中
注意,我使用PDO_OCI而不是OCI8,但是./configure应该类似
在部署到新服务器时,我采取的另一个步骤是确保apache用户/组(由httpd.conf中的user和group指令定义……我的apache作为用户“守护进程”运行)将拥有ORACLE_HOME下文件的读取和执行权限我已找到问题的原因,但不知道如何永久解决它。显然,我们的测试服务器正在使用SELinux设置为“强制”。将其设置为“Permissive”允许Apache/PHP运行oci8扩展。然而,我的老板希望塞利努克斯回到“执行”上来,对此我不怪她。我将研究为Oracle/oci8创建一个异常。Re。作为Apache模块运行时使用SELinux和OCI8 建议的解决方案来自 您可以使用audit2allow自定义策略以允许此访问
# grep http /var/log/audit/audit.log | audit2allow -M myhttp
# semodule -i myhttp.pp
这将允许您在强制执行时使用SELinux运行这些oracle应用程序
模式
在上也有一条关于这一点的帖子,谢谢。我设置了LD_LIB_路径,但没有设置ORACLE_变量。我会看看这是否解决了问题。好的,我设置了这些变量,但oci8仍然没有加载到浏览器中。根据手册,我不需要ORACLE_uuvars。谢谢你在这里澄清这个问题。如果你找到了一个好的,永久的解决方案。。。请务必为可能遇到相同问题的任何其他人发布详细信息。php.net上的安装指南说,“如果Oracle数据库与php位于同一台机器上,则数据库软件已包含必要的库”。然而,在我的例子中,当我排除Oracle即时客户端时,即使PHP和Oracle驻留在同一台机器上,oci8也只能在命令模式下工作,但无法在apache中加载。包括客户为我解决了这个问题。