1

我正在尝试为我的数据库类中的项目设置服务器。我将用 php 编写项目,通过 apache 部署它,并连接到远程 oracle 服务器。我在使用 oracle 连接部分时遇到问题。我安装了 OCI8 模块和 oracle 的 Instantclient 版本 10.2。我认为它正在工作,因为当我从控制台运行以下程序时,我得到了正确的输出。
程序:

<?php
$conn = oci_connect("asdf", "asdf", "asdf");
if (!$conn) {
   die("connection error\n");
}

$stid = oci_parse($conn, 'SELECT * FROM PARTS');
if (!$stid) {
   die("statement parsing error\n");
}

$r = oci_execute($stid);
if (!$r) {
   die("execution error\n");
}

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

oci_free_statement($stid);
oci_close($conn);
?>

结果:
<table border='1'>
<tr>
<td>1</td>
<td>wrench</td>
<td>silver</td>
</tr>
<tr>
<td>2</td>
<td>hammer</td>
<td>brown</td>
</tr>
</table>

所以我认为一切都很好。但是当我在浏览器中访问同一个 php 页面时,我收到以下错误消息:
Fatal error: Call to undefined function oci_connect() in /home/eric/apache2/htdocs/realestate/basicQuery.php on line 2
我认为这可能意味着命令行和 apache 中使用了两个不同版本的 php,所以我运行了 phpinfo(); 对彼此而言。但是他们都返回了相同的 php 信息(PHP 版本 5.2.10-2ubuntu6.4)。它们使用不同的 php.ini 文件(/etc/php5/apache2/php.ini 和 /etc/php5/cli/php.ini),但它们完全相同。我不知道在哪里可以寻找在一种环境与另一种环境中可能不同的任何东西。
谢谢你的帮助!

4

3 回答 3

0

PHP 需要知道从哪里加载它的扩展(这是 PHP 和 Oracle 提供的库之间的桥梁)。由于它从 CLI 运行,您似乎已经安装了该软件包。

如果ini文件相同,则还需要检查:

1)你记得配置oracle库后重启apache吗?

2) 您的网络服务器是否以 chroot 身份运行?

3) oci8 扩展的权限是什么?(即网络服务器 uid 是否可读)

您还需要将 oracle .so 文件的路径添加到您的 ld.so.conf 并运行 ldd 或调整您的 Env vars - 但是如果您跳过它,这将给出与您描述的错误不同的错误。

高温高压

C。

于 2010-04-06T20:44:52.840 回答
0

您的系统中是否安装了oci8扩展?检查是否不是,然后按照以下链接安装它?

为了理解,请参阅this。 在 linux 中为 php 安装 oci8 扩展?

有关安装的明确说明,请参阅此链接。 http://www.oracle.com/technetwork/articles/dsl/technote-php-instant-12c-2088811.html

检查您的 php.ini 文件是否设置了以下内容。

extension=oci.so

extension_dir="Your path where .so files are present"

安装后,您应该重新启动 apache。让我知道这是否对您有帮助。

于 2015-12-18T10:16:30.893 回答
0

这可能是很多东西,没有正确安装 OCI8 模块,没有被 apache 加载,甚至没有安装依赖项。

安装 OCI8

安装 OCI8 最简单的方法是使用 pecl:

pecl install oci8-2.0.12 # for PHP 5.5/6

启用模块

然后,您需要通过extension=oci8.sophp.ini.

现在确保您的配置中有一个oci8.so文件。extension_dir这可以在 phpinfo 或执行中找到php -i | grep extension_dir。例如,我的是/usr/lib/php/20131226.

重启你的apache执行apachectl restart,看看你的phpinfo中是否有oci8配置。

怜悯射击

如果您尝试了所有方法但没有成功(这已经发生在我身上),请确保libaio1已安装在您的系统中。如果不是,请通过执行apt install libaio1并重新启动 apache 来安装它。就我而言,它成功了。希望有帮助。

于 2017-05-24T15:10:37.913 回答