oci_connect PHP中的空白页面

时间:2010-03-05 19:56:24

标签: php oracle pecl oci8

更新(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:

将主机更改为//主机

返回:

相同错误

5 个答案:

答案 0 :(得分:3)

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

你也可以尝试设置PHP's error log并查看。


EDIT1 :尝试:

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

发布结果......


编辑2:我真的不确定。我最好的选择是来自the PHP manual的信息:

  

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

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

答案 1 :(得分:1)

布赖恩,

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

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

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

Zend Server

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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