繁体   English   中英

oci_connect PHP中的空白页面

[英]oci_connect Blank Page in PHP

更新(5/21/2010)成功!

所以在MUCH $ head-> desk()之后,我已经解决了。

记住孩子,要警惕你使用的即时客户端版本,这取决于虚拟化设置!

我一直在安装通用的即时客户端(不知道我们的ESX服务器位于AMD处理器上,而不是英特尔),而且内部工作正常(CentOS安装是32位,因为我们的内部ESXi服务器不是64位)。 好吧,即使您在位于AMD64上的虚拟化服务器上​​运行32位安装,您安装的即时客户端仍然很重要。

这是我想要检查的最后一件事但是看起来现在一切都运行正常。

我要感谢所有帮助我完成所有可能测试的人,但最终,我没有意识到虚拟化的差异。


更新(2010年5月21日)当我在内部安装新VM时,我认为这个错误已经逃脱了,但我现在发现了一个缩小的链接。

当我发布这个时,我试图在我们的生产服务器上安装它。 经过一周没有进展并且需要重新开发之后,我在我们的内部服务器上配备了一个全新安装的Crap ... CentOS,以及全新安装的即时客户端和oci8。

工作得很完美。

但是,我们只是将VM的精确副本上传到我们的生产服务器,它神奇地不再有效。 尝试重新安装一切,无济于事。

所以我唯一可以解决的问题是防火墙问题(虽然我在尝试127.0.0.1时遇到同样的问题)或可能是ESX(我们的生产服务器)服务器问题,但内部服务器正在运行ESXi。

有什么想法吗?

更新(2010年3月8日)我安装了Xdebug并让它跟踪我的代码。 这是我得到的输出:

TRACE START [2010-03-08 17:53:05]
    0.2090     327864   -> {main}() /data/aims3/http/octest.php:0
    0.2091     327988     -> ini_set(string(14), string(1)) /data/aims3/http/octest.php:3
    0.2093     327920     -> error_reporting(long) /data/aims3/http/octest.php:4
    0.2094     328048     -> oci_connect(string(8), string(8), string(25)) /data/aims3/http/octest.php:6

跟踪在此时停止。

我已经在本地服务器上以相同的方式安装了一切,它工作正常。 说我完全失败就会轻描淡写。


*注意 :我运行了make test并且在每次测试时都返回了FAIL。 我从来没有在我的工作机器上运行它,看它是否报告相同的错误。 知道为什么make test会报告FAIL但是make不会报告任何错误吗?

我已经安装了没有报告错误的Oracle Instantclient以及OCI8 PECL软件包而且不知所措。 每当我尝试使用oci_connect打开连接时,它都会暂停我的整个PHP脚本。

例:

<?php
ini_set ("display_errors", "1");
error_reporting(E_ALL);
echo "before";
$conn = oci_connect("username", "password", "host");
echo "after";
?>

返回一个完整的空白页面。 加载模块(在phpinfo中看到),所有安装都没有错误。

我完全失去了。

CentOS:5.4

Apache:2.2.3

PHP:5.3.1

InstantClient:11.2

oci8:1.4.1

有什么想法吗?

笔记

Apache错误日志没有任何报告

尝试调试:

1:

<?php
ini_set ("display_errors", "1");
error_reporting(E_ALL);
echo "before";
if(!function_exists('oci_connect')) die('Oracle Not Installed');
echo "after";
?>

返回:

beforeafter

2:

将主机更改为//主机

返回:

同样的错误

Apache的error_log中有什么内容吗? 这是mod_php或FastCGI还是普通的CGI PHP? 如果通过命令行运行脚本会发生什么?

您也可以尝试设置PHP的错误日志并查看。


编辑1 :尝试:

echo "before";
if(!function_exists('oci_connect')) die('Oracle Not Installed');

并发布结果......


编辑2:我真的不确定。 我最好的选择是来自PHP手册的这些信息:

安装OCI8最常见的问题是没有正确设置Oracle环境。 使用oci_connect()或oci_pconnect()通常会出现问题。 该错误可能是PHP错误,例如调用未定义函数oci_connect(),Oracle错误(如ORA-12705),甚至是Apache崩溃。 检查Apache日志文件是否有启动错误,并参阅上面的部分以解决此问题。

其他人有什么想法帮助布莱恩?

布莱恩,

我要说实话:两年前我试过这个并且失败了。 :)我无法通过编译自己来获得OCI功能。

但为了完成它,我寻找了一个替代解决方案,并在Zend Core for Oracle中找到了它。 我所做的就是下载,运行安装程序,然后就完成了。 它为您安装Apache / PHP,MySQL(可选)和InstantClient。

现在作为Zend Server,它基本上是相同的产品。 我意识到这可能不是你所希望的解决方案,但如果它有效......

Zend Server

你连接到远程或本地数据库? 我认为,对于localhost,您必须将“host”替换为“false”。 我希望这能帮到您...

编辑:我想,你错过了一个参数......我的最后建议是:1。你必须设置端口(默认为1521)和/或2.你必须输入数据库名称和/或你必须设置实例名称( ORACLE_SID参数)

你永远不会检查oci_connect()的返回值或调用oci_error(),但它看起来与你的问题无关,因为你似乎正在遭受PHP崩溃。 RHEL还有一个可能对您有影响的漏洞:

http://pecl.php.net/bugs/bug.php?id=16626

你自己构建了oci8包吗? 您使用的是第三方二进制文件吗?

它已被修复。 有关详细信息,请参阅顶部,但这里有悬崖说明:虚拟化环境很重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM