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

当apache使用php5运行时,找不到OCI8函数,php,oracle,apache,oci8,Php,Oracle,Apache,Oci8,我正在尝试为数据库类中的项目设置服务器。我将用php编写该项目,通过apache进行部署,并连接到远程oracle服务器。我在oracle连接部分遇到问题。我已将OCI8模块与oracle的instantclient 10.2版一起安装。我认为它可以工作,因为当我从控制台运行以下程序时,我得到了正确的输出。 节目: <?php $conn = oci_connect("asdf", "asdf", "asdf"); if (!$conn) { die("connection erro

我正在尝试为数据库类中的项目设置服务器。我将用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);
?>

PHP需要知道从何处加载其扩展(这是PHP和Oracle提供的libs之间的桥梁)。由于它是通过CLI工作的,所以您似乎已经安装了该软件包

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

1) 您是否记得在配置oracle LIB后重新启动apache

2) 您的Web服务器是否以chroot运行

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

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


C.

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

如需了解,请参阅此。

有关安装的明确说明,请参阅此链接。

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

extension=oci.so

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

安装应该重新启动apache。如果这对您有帮助,请告诉我。

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

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

pecl安装oci8-2.0.12#适用于PHP5.5/6

启用模块 然后需要通过将
扩展名=oci8.so
放入
php.ini
来加载它

现在确保在
扩展名\u dir
配置中有一个
oci8.so
文件。这可以在phpinfo或executing
php-i | grep extension_dir
中找到。例如,我的是
/usr/lib/php/20131226

重新启动apache,执行
apachectl Restart
,查看phpinfo中是否有
oci8
配置

慈悲射击
如果您尝试了所有方法,但都没有成功(我已经遇到过这种情况),请确保系统中安装了
libaio1
。如果不是,请执行apt install libaio1安装它,然后重新启动apache。就我而言,它成功了。希望能有所帮助。

这些php.ini是否包含类似于
extension=oci8的行。因此
,即oci8扩展是否编译为共享模块?是的,它们都包含这一行。我在安装时必须补充这一点。