当通过PHP5运行Apache找不到OCI8功能(OCI8 functions not found

2019-09-26 04:36发布

我想建立一个服务器,在我的数据库类的项目。 我会在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
我认为,可能意味着得到了用于命令行和Apache的两个不同版本的PHP,所以我跑的phpinfo(); 对彼此而言。 但他们都回来了相同的PHP信息(PHP版5.2.10-2ubuntu6.4)。 他们使用不同的php.ini文件(/etc/php5/apache2/php.ini和/etc/php5/cli/php.ini),但他们都是一模一样的。 我不知道还有什么地方去寻找任何可能在一个环境中与其他的不同。
谢谢你的帮助!

Answer 1:

PHP需要知道从哪里加载其扩展名(PHP和Oracle之间的桥梁提供库)。 由于从CLI其工作你似乎已经得到了安装的软件包。

如果INI文件是相同的,那么你还需要检查:

1)你记得配置oracle库后重新启动Apache的?

2)没有你的服务器运行的chroot环境?

3)什么都在OCI8扩展的权限? (即是它可读网络服务器UID)

您还需要路径.so文件添加到了Oracle您ld.so.conf中并运行LDD或调整你的信封瓦尔 - 但是这会给出一个不同的错误,如果你跳过你描述的一个。

HTH

C。



Answer 2:

你已经安装在你的系统中的OCI8扩展? 检查如果没有,那么安装它跟随下面的链接?

为了了解请参阅本。 在Linux上安装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。 让我知道如果这能帮助你。



Answer 3:

这可能是很多东西的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 php -i | grep extension_dir 。 例如,我的是/usr/lib/php/20131226

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

仁慈镜头

如果你什么都试过了,它没有工作(已经发生在我身上),确保libaio1安装在您的系统。 如果不是,通过执行安装它apt install libaio1并重新启动Apache的。 在我而言,它的伎俩。 希望帮助。



文章来源: OCI8 functions not found when run by apache with php5