1

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

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

所以apache中的php正在工作。现在进行以下简单的连接到 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 工作而 apache 提供相同的 php 脚本不起作用。由同一个 apache 提供的 phpinfo() 显示已安装并启用了 oci8。

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

4

1 回答 1

0

由于没有为 oracle 即时客户端和 oracle express 11g 等安装路径正确设置 ORACLE_HOME 和 LD_LIBRARY_PATH,因此发生错误。我在 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");
于 2017-01-18T21:07:56.010 回答