调用未定义的函数oci_connect()

时间:2014-03-18 11:44:30

标签: php oracle

我收到了这个错误。

Fatal error: Call to undefined function oci_connect()
$conn = oci_connect('localhost', 'username', 'password') or die(could not connect:'.oci_error)

这就是代码。

这是我得到的错误。

Fatal error: Call to undefined function oci_connect() in C:\xampp\htdocs\org\org\php\myphp.php on line 51

我检查了ext文件夹中的PHP DLL文件。

有人提前感谢此人提供帮助。

15 个答案:

答案 0 :(得分:15)

我只花了三个星期来对抗这个问题。

我在Windows 7中使用了我的ORACLE连接,没问题。上周我刚买了一台装有Windows 8的新电脑。安装XAMPP 1.8.2。这台服务器上的每个应用程序PHP / MySQL都运行正常。当我尝试将我的php应用程序连接到Oracle DB时出现问题。

  

调用未定义的函数oci_pconnect()

当我通过更改启动/停止Apache时,“PHP启动”上的一个奇怪的“警告”转到LOG“PHP警告:PHP启动:在第0行的未知”

我做了所有事情(取消注释了php_oci8.dll和php_oci8_11g.dll,将oci.dll复制到/ ext目录,靠近/ Apache并且没有工作。下载每个版本的Instant Client和NOTHING。

上帝来到我的帮助之下。当我下载ORACLE Instant Client 32位时,一切正常。 phpinfo()显示oci8信息,我的应用程序工作正常。

所以,从来没有想过你的WINDOWS版本是x64。该链接位于XAMPP和ORACLE Instant Client之间。

答案 1 :(得分:6)

简单步骤

您需要在php.ini

中启用以下扩展名
;extension=php_oci8.dll
;extension=php_oci8_11.g.dll

删除“;”以便结果如下:

extension=php_oci8.dll
extension=php_oci8_11.g.dll

下载Oracle Instant Client: - 最好是32位。 32位也可以在64位上运行。你可以只谷歌:下载oracle即时客户端窗口32位。使用客户端版本11,因为extension=php_oci8_11.g.dll无法使用.12。将包解压缩到C:\Oracle\instantclient_11_2等位置。

最后使用结束位置修改系统的PATH环境变量,在系统变量而不是用户变量下

然后,您需要重新启动系统以使PATH更改完全传播。

如果您只是重新启动XAMPP / WAMP而不重新启动计算机,则不会加载(也未找到)客户端的DLL文件(即OCL.dll) 通过PHP的php_oci8_11g.dll扩展名。

答案 2 :(得分:4)

确保事项

  1. 每当你连接Oracle数据库时,尝试使用32位oracle客户端库,因为XAMP PHP是用32位编译的(虽然你有64位Windows机器)
  2. Download From here

  3. 下载Oracle客户端
  4. 将其粘贴到C:\ instantclient_12_1

  5. 然后在“系统环境变量”
  6. 中设置上面的路径
  7. 然后转到C:\ xampp \ php \ php.ini并取消注释 extension = php_oci8_12c.dll
  8. 然后重新启动XAMP,它应该没有任何问题。

答案 3 :(得分:3)

您需要在php.ini文件中启用该扩展名。见Oracle Installation

extension=oci8.so

答案 4 :(得分:3)

我安装了WAMPServer 2.5(32位)并且还遇到了oci_connect错误。我还安装了Oracle 11g客户端(32位)。我在其他帖子中读到的常见修复是更改C:\ wamp \ bin \ php \ php5.5.12目录中的php.ini文件,但这对我来说无效。也许我误解了,但我发现如果你改变C:\ wamp \ bin \ apache \ apache2.4.9目录中的php.ini文件,你会得到你想要的结果。我在apache php.ini文件中唯一改变的是删除分号到b以启用它。然后我重新启动了所有服务,它现在可以工作了!我希望这适合你。

答案 5 :(得分:1)

好的,伙计们。

首先,使用

<?php 
phpinfo();
?> 

并确定您的PHP版本(位于最顶部,例如7.0.xxx) 还有您的PHP版本架构:x64或x86 以及线程安全或线程不安全(在第一张表中为“线程安全”。)“禁用”显然意味着“线程不安全”。

以下三个软件绝对是至关重要的:

  1. 对于相同的主要PHP版本(7.0对于7.0.xxx)
  2. 与您正在访问的Oracle版本相同(11g,12g等)
  3. 相同的PHP非线程安全/线程安全版本
  4. 所有相同的体系结构。

如果以下任何一种用于不同的体系结构,非线程安全/线程安全版本,PHP主版本号或数据库版本,则会出现错误:

 1. PHP for Windows
 2. OCI8 PECL Drivers for PHP (https://pecl.php.net/package/oci8)
 3. Oracle Instant Client

请记住:如果要连接到11g Oracle实例,则需要一个11g驱动程序。

第二,安装正确的PHP,OCI8 PECL驱动程序和即时客户端。

我选择:

d:\php\ for php
d:\oci\ for instant client
unzip the contents of the OCI8 PECL Driver into d:\php\ext\

第三,根据Oracle提供的说明修改d:\ php \ php.ini:

1. set the extension directory
2. set only one of the following:
  a. for 11g drivers, use extension=php_oci8_11g.dll
  b. for 12c drivers, use extension=php_oci8_12c.dll
  c. for other oracle DB drivers, use the correct oracle extension.

第四:将d:\ oci \(或任何即时客户端安装位置)添加到系统PATH。

第五:重新启动PC。

第六,在命令提示符下,键入“ where oci *”,并验证是否存在oci.dll的Instant Client安装路径版本。

第七名,转到d:\ php \并键入“ php -m”,您应该会在列表中看到OCI8。

如果在键入“ php -m”后在模块列表中没有看到OCI8,请打开d:\ php \ errorlog.txt

如果您看到类似这样的内容:

PHP Warning:  PHP Startup: Unable to load dynamic library 'ext\php_oci8_11g.dll' - %1 is not a valid Win32 application.

然后,即时客户端或PECL驱动程序下载与您的PHP版本的体系结构不同。

如果您看到类似这样的内容:

PHP Warning:  PHP Startup: Unable to load dynamic library 'ext\php_oci8_12c.dll' - The specified procedure could not be found.

然后您为即时客户端版本使用了错误的OCI8 PECL驱动程序。

希望这会有所帮助。

答案 6 :(得分:0)

我安装了Wamp&amp;期望一切都能开箱即用。不是这样。 我的x64 Windows机器上有2个Oracle客户端(即时和完整)。如果其他人有类似的设置,诀窍是确保即时客户端是(a)在您的Path环境变量中,(b)在Path变量中的完整客户端之前。在Windows here上有一个非常简短的部分,但它给出了答案。

答案 7 :(得分:0)

如果任何人在生命的某个阶段面临这个问题,那么这就是我的故事:

  • Windows 10 x64
  • Oracle Express 11g
  • XAMPP 32位,PHP 7.1.6

    1. 下载Instant Client Basic 12.1 here(配置命令中phpinfo()所需的版本)。我下载了32位的v12.1(即使我的电脑是x64)
    2. 下载Instant Client SDK(位于您下载Instant Client的同一站点,但向下滚动一下)
    3. 将下载的文件复制到C:驱动器中: C:\ instantclient_12_1 ,里面有sdk之类的 的 C:\ instantclient_12_1 \ SDK
    4. 添加到系统环境变量这两个以前的路由(SDK的ORACLE_PATH和ORACLE_PIN)
    5. 通过删除semicollon取消注释php.ini(C:\ xampp \ php \ php.ini)中的 extension = php_oci8_12c.dll extension = php_pdo_oci.dll 在它面前。
    6. 重启你的电脑,因为你改变了你的SYSTEM变量(这样也会重新启动XAMPP)
PS:我生命中的两天要做到这一点。

干杯

答案 8 :(得分:0)

尝试

在php.ini文件中取消注释

ith“删除分号”

答案 9 :(得分:0)

我遇到了同样的问题,this page上的解决方案帮助了我,这是由于使用了不兼容的oci ddl文件造成的。

希望有帮助。

答案 10 :(得分:0)

  • 为xampp 7.2.9下载xampp并取消注释oracle 12c扩展名或11c'extension = oci8_11g'
  • 下载32位即时客户端并设置其路径
  • 下载即时客户端32位SDK软件包并设置其路径
  • 将即时客户端和SDK dll文件复制到xamp \ php \ ext,xampp \ php \和xampp \ appache \ bin \
  • 下载与踏板安全x86相同的php版本的php-oci,然后将其文件复制到php \ ext * .dll, php版本写在xampp管理员的phpinfo选项卡上。
  • OCI8将出现在phpadmin页面或apache admin以及phpadmin选项卡上。这表示已安装phpOCI。

答案 11 :(得分:0)

  1. 检查您的php –version,就像PHP 5.6.32(cli)(建立于:2017年10月25日16:02:15)。
  2. 使用OCI8扩展名访问Oracle数据库。因此,请从1 https://pecl.php.net/package/oci8/2.0.8/windows下载php_oci8.dll。 (5.6 Thread Safe(TS)x86)php_oci8.dll必须与您的php版本相同。然后解压缩它,您将发现  1.php_oci8.dll  2.php_oci8_11g.dll(根据您的oralce版本)将这两个文件粘贴到您的
     (xampp \ php \ ext)文件夹。

  3. 打开您的php.ini文件并将其添加  扩展名= php_oci8.dll  extension = php_oci8_11g.dll

  4. 使用这些命令检查您的oracle版本和服务名称

    1. 打开您的cmd
    2. sqlplus /作为sysdba
    3. 从v $ version中选择*; Oracle Database 11g企业版11.2.0.1.0版-生产,我们的oracle版本是11g,因此我们可以使用从https://www.oracle.com/technetwork/topics/winsoft-085727.html
    4. 下载的Instantclient_11_1(Instant Client 32位)
  5. 显示参数service_name; service_name是orcl(您应该记住此服务名称)

  6. 下载Instantclient_11_1后,将其解压缩,然后粘贴到本地磁盘中。并复制路径C:\ instantclient_11_1,然后将此路径设置为用户变量和系统变量。请注意,我的代码无需设置路径变量即可正常工作。

  7. 打开您的cmd并输入SQL,按照以下命令创建架构

    1. sqlplus /作为sysdba
    2. 创建由pass123标识的用户dbname;
    3. 授予连接,资源为dbname;

    4. 创建表user_info并将数据插入到表中并提交。 注意:您必须提交数据或未插入数据。

    5. 然后此脚本在您的htdocs中运行

<html>
<head><title>Oracle demo</title></head>
<body>
<?php

// Create connection to Oracle
$conn = oci_connect("dbname", "pass123", "//localhost/orcl");  // orcl is your service_name

$query = 'select * from user_info';
$stid = oci_parse($conn, $query);
$r = oci_execute($stid);

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

答案 12 :(得分:0)

从用于Microsoft Windows(x64)的Instant Client下载并将以下文件提取到“ c:\ oracle”:

instantclient-basic-windows.x64-12.1.0.2.0.zip

instantclient-sqlplus-windows.x64-12.1.0.2.0.zip

instantclient-sdk-windows.x64-12.1.0.2.0.zip 这将创建以下文件夹“ C:\ Oracle \ instantclient_12_1”。

最后,将“ C:\ Oracle \ instantclient_12_1”文件夹添加到PATH环境变量中,并将其放在最左侧。

然后重新启动服务器。

答案 13 :(得分:0)

1 - 第一步是通过检查 phpinfo 中的 PHP 详细信息,为您的 xampp 或 wampp 或 lampp 安装确定正确的即时客户端。创建一个简单的 php 文件并添加以下代码并在浏览器上预览。

<?php 
phpinfo();
?> 

phpinfo() details

2 - 转到 https://www.oracle.com/database/technologies/instant-client/downloads.html 并为您的架构(32 位或 64 位)下载正确的即时客户端(基础包和 sdk)

Instant client package - basic

Instant client package - SDK

3 - 将 Instantclient 解压缩到您的首选目录并将路径添加到您的环境变量中。

4 - 转到 php.ini 并通过删除该行开头的 oci8 来启用 ; 扩展。 寻找这一行

;extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client

重构为

extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client

Environment variables

5 - 重启你的电脑

6 - 检查您的 phpinfo(您在第 1 步中创建的页面)。您应该会看到以下详细信息:

OCI8

答案 14 :(得分:-3)

enter image description here

为Oracle数据库设置NLS_LANG环境变量(By - Jaydev) 请按照此过程为Oracle数据库设置NLS_LANG环境变量。 为Oracle数据库设置NLS LANG环境变量