5

更新(2010 年 5 月 21 日)成功!

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

请记住孩子们,请注意您使用的即时客户端版本,具体取决于虚拟化设置!

我一直在安装通用的 Instant Client(不知道我们的 ESX 服务器安装在 AMD 处理器上,而不是 Intel)并且在内部运行良好(CentOS 安装是 32 位,因为我们的内部 ESXi 服务器不是 64 位)。好吧,瞧瞧,即使您在 AMD64 上的虚拟化服务器上​​运行 32 位安装,安装什么即时客户端仍然很重要。

这是我想检查的最后一件事,但看起来,现在一切都运行良好。

我要感谢所有帮助我完成所有可能的测试以弄清楚这一点的人,但最后,我没有意识到虚拟化的差异是我的错。


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

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

工作完美。

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

所以我唯一可以缩小范围是防火墙问题(尽管我在尝试 127.0.0.1 时遇到了同样的问题)或者可能是 ESX(我们的生产服务器)服务器问题,内部服务器正在运行 ESXi。

有什么想法吗?

更新 (3/8/2010)我安装了 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 中可见),并且所有内容都已安装且没有错误。

我完全不知所措。

中央操作系统:5.4

阿帕奇:2.2.3

PHP: 5.3.1

即时客户端: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:

将主机更改为//主机

回报:

同样的错误

4

5 回答 5

3

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

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


EDIT1:尝试:

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

并发布结果...


EDIT2:我真的不确定。我最好的选择是来自PHP 手册的信息:

安装 OCI8 最常见的问题是没有正确设置 Oracle 环境。这通常表现为使用 oci_connect() 或 oci_pconnect() 的问题。该错误可能是 PHP 错误,例如 Call to undefined function oci_connect(),Oracle 错误,例如 ORA-12705,甚至是 Apache 崩溃。检查 Apache 日志文件中的启动错误,并查看上面的部分来解决此问题。

还有其他人有什么想法可以帮助布莱恩吗?

于 2010-03-05T20:21:47.987 回答
1

布莱恩,

老实说:我在两年前尝试过,但惨遭失败。:) 通过自己编译,我无法让 OCI 函数为任何事情工作。

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

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

Zend 服务器

于 2010-05-13T15:15:44.323 回答
0

您是连接到远程数据库还是本地数据库?我认为,对于本地主机,您必须将“主机”替换为“假”。我希望这能帮到您...

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

于 2010-03-05T21:02:43.687 回答
0

您从不检查 oci_connect() 或调用 oci_error() 的返回值,但它看起来与您的问题无关,因为您似乎正遭受 PHP 崩溃的困扰。有一个 RHEL 的开放错误也可能会影响您:

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

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

于 2010-03-08T16:58:27.297 回答
0

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

于 2010-05-22T03:41:39.453 回答