所以在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:
将主机更改为//主机
返回:
相同错误
答案 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');
发布结果......
最常见的问题 安装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,它基本上是相同的产品。我意识到这可能不是你所希望的解决方案,但如果它有效......
答案 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)
它已被修复。有关详细信息,请参阅顶部,但这里是悬崖说明:虚拟化环境很重要。