使用 apache 和 php 以及 OCI8 和 Oracle Express 11g 时页面不显示

Page not displaying with apache and php and OCI8 and Oracle Express 11g

我在 Slackware linux 和 运行ning 上安装了 Oracle Express 11g。我能够连接到它并进行 运行 查询。 我安装了 apache 和 php 以及 oci8。 phpinfo() 显示已加载并启用 oci8。 对于以下简单的 php 脚本,网页显示:

<?php echo "Hello World!!!"; ?>

所以 php 在 apache 中工作。 现在进行以下简单连接到 oracle 并显示版本:

<html>
<body>
Oracle Version <br/>
<?php

$conn = oci_connect('SYSTEM', 'password', 'localhost/XE');

$stid = oci_parse($conn, 'select banner from v$version');
oci_execute($stid);

echo "<table>\n";
while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
    echo "<tr>\n";
    foreach ($row as $item) {
        echo "  <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;")."</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";

?>
</body>
</html>

这是在 Web 浏览器中查看源代码时显示的以下内容:

<html>
<body>
Oracle Version <br/>
<table>
</table>
</body>
</html>

然而,当我 运行 带有 /usr/bin/php oratest.php 的脚本时,它会正确输出以下内容:

<html>
<body>
Oracle Version <br/>
<table>
<tr>
  <td>Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production</td>
</tr>
<tr>
  <td>PL/SQL Release 11.2.0.2.0 - Production</td>
</tr>
<tr>
  <td>CORE      11.2.0.2.0      Production</td>
</tr>
<tr>
  <td>TNS for Linux: Version 11.2.0.2.0 - Production</td>
</tr>
<tr>
  <td>NLSRTL Version 11.2.0.2.0 - Production</td>
</tr>
</table>
</body>
</html>

这怎么可能。为什么命令行 php 可以工作,而提供相同 php 脚本的 apache 却不能工作。由同一个 apache 提供的 phpinfo() 显示已安装并启用 oci8。

如果您有任何想法,请提前致谢。

错误是由于 ORACLE_HOME 和 LD_LIBRARY_PATH 没有为 oracle 即时客户端和 oracle express 11g 等安装路径正确设置。 我在 php 代码的开头使用了 putenv() php 指令,并且没有错误。

putenv("ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe");
putenv("LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/xe/lib:/usr/lib64/oracle/12.1/client64/lib");