当apache使用php5运行时,找不到OCI8函数
我正在尝试为数据库类中的项目设置服务器。我将用php编写该项目,通过apache进行部署,并连接到远程oracle服务器。我在oracle连接部分遇到问题。我已将OCI8模块与oracle的instantclient 10.2版一起安装。我认为它可以工作,因为当我从控制台运行以下程序时,我得到了正确的输出。当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
$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) : " ") . "</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或executingphp-i | grep extension_dir
中找到。例如,我的是/usr/lib/php/20131226
重新启动apache,执行apachectl Restart
,查看phpinfo中是否有oci8
配置
慈悲射击
如果您尝试了所有方法,但都没有成功(我已经遇到过这种情况),请确保系统中安装了libaio1
。如果不是,请执行apt install libaio1安装它,然后重新启动apache。就我而言,它成功了。希望能有所帮助。这些php.ini是否包含类似于extension=oci8的行。因此
,即oci8扩展是否编译为共享模块?是的,它们都包含这一行。我在安装时必须补充这一点。