Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php OCI8扩展在CLI中加载,但不在浏览器中加载_Php_Apache_Centos_Selinux_Oci8 - Fatal编程技术网

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中加载。包括客户为我解决了这个问题。