使用php5运行apache时找不到OCI8函数

时间:2010-04-06 19:03:51

标签: php oracle apache oci8

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

<?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
我认为这可能意味着两个不同版本的php被用于命令行和apache,所以我运行了phpinfo();对彼此而言。但他们都回来了相同的PHP信息(PHP版本5.2.10-2ubuntu6.4)。他们使用不同的php.ini文件(/etc/php5/apache2/php.ini和/etc/php5/cli/php.ini),但它们都完全相同。我不知道在哪里可以寻找在一个环境中与另一个环境中可能不同的任何东西 谢谢你的帮助!

3 个答案:

答案 0 :(得分:0)

PHP需要知道从哪里加载其扩展(这是PHP与Oracle提供的库之间的桥梁)。从CLI开始工作以来,您似乎已经安装了软件包。

如果ini文件相同,那么您还需要检查:

1)您是否记得在配置oracle libs后重启apache?

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

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

您还需要将oracle .so文件的路径添加到ld.so.conf并运行ldd或调整您的Env变量 - 但如果您跳过它,这将给您描述的错误带来不同的错误。 / p>

HTH

下进行。

答案 1 :(得分:0)

您的系统中是否安装了 oci8 扩展程序?检查是否不安装它,请按照以下链接进行操作?

为了理解,请参阅此内容。 Installing oci8 extension in linux for php?

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

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

{{1}}

安装后,您应重新启动apache 。如果这有助于你,请告诉我。

答案 2 :(得分:0)

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

安装OCI8

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

pecl install oci8-2.0.12 # for PHP 5.5/6

启用模块

然后您需要将extension=oci8.so放在php.ini

中来加载它

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

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

怜悯射击

如果您尝试了所有操作并且它没有工作(已经发生在我身上),请确保系统中已安装libaio1。如果不是,请执行apt install libaio1并重新启动apache进行安装。在我的情况下,它做了伎俩。希望有所帮助。