繁体   English   中英

调用未定义函数 oci_connect()

[英]Call to undefined function oci_connect()

我收到了这个错误。

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 文件。

我只花了整整三天的时间与这个问题作斗争。

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

调用未定义的函数 oci_pconnect()

当我通过更改启动/停止 Apache 时,“PHP 启动”上出现一个奇怪的“警告”,它会以“PHP 警告:PHP 启动:在第 0 行中未知”进入日志

我做了一切(未注释的 php_oci8.dll 和 php_oci8_11g.dll,将 oci.dll 复制到 /ext 目录,靠近 /Apache 并且没有任何效果。下载 Instant Client 的每个版本,什么也没有。

上帝帮助了我。 当我下载 ORACLE Instant Client 32 位时,一切正常。 phpinfo() 显示 oci8 信息,我的应用程序运行良好。

因此,请不要介意您的 WINDOWS 版本是 x64。 该链接位于 XAMPP 和 ORACLE Instant Client 之间。

简单的步骤

您需要在 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 即时客户端 windows 32 位。 使用客户端的版本 11,因为extension=php_oci8_11.g.dll不适用于 12。将包解压缩到一个位置,例如C:\\Oracle\\instantclient_11_2

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

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

如果您只是在没有重新启动机器的情况下重新启动 XAMPP/WAMP,PHP 的php_oci8_11g.dll扩展将不会加载(也找不到)客户端的 DLL 文件(即 OCL.dll)。

需要确保的事情

  1. 每当您连接 Oracle 数据库时,请尝试使用 32 位 oracle 客户端库,因为 XAMP PHP 是用 32 位编译的(尽管您有 64 位 Windows 机器)
  2. 从此处下载 Oracle 客户端

  3. 将其粘贴到 C:\\instantclient_12_1

  4. 然后在系统环境变量中设置路径到上面
  5. 然后转到 C:\\xampp\\php\\php.ini 并取消注释extension=php_oci8_12c.dll
  6. 然后重新启动 XAMP,它应该可以正常工作而不会出现任何问题。

您需要在 php.ini 文件中启用该扩展。 请参阅Oracle 安装

extension=oci8.so

我安装了 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 文件中唯一更改的是删除extension=php_oci8_11g.dll的分号以启用它。 然后我重新启动了所有服务,它现在可以工作了! 我希望这对你有用。

  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 文件并添加这些 extension=php_oci8.dll extension=php_oci8_11g.dll

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

    1. 打开你的cmd
    2. sqlplus / 作为 sysdba
    3. 从 v$version 中选择 *; Oracle 数据库 11g 企业版 11.2.0.1.0 版 - 生产,我们的 oracle 版本是 11g,因此我们可以使用从https://www.oracle.com/technetwork/topics/winsoft-085727下载的 instantclient_11_1(即时客户端 32 位) .html
  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>';

好吧,伙计们。

首先,使用

<?php 
phpinfo();
?> 

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

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

  1. 对于相同的 PHP 主要版本(7.0.xxx 为 7.0)
  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\\(或任何您的即时客户端安装位置)添加到您的系统路径。

第五:重启你的电脑。

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

第七,转到 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 驱动程序。

希望这可以帮助。

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

尝试这个

在 php.ini 文件中取消注释这个

extension_dir = "./" "去掉分号"

我遇到了同样的问题, 此页面上的解决方案对我有帮助,这是由使用不兼容的 oci ddl 文件引起的。

希望能帮助到你。

  • 下载 xampp 并取消注释 oracle 12c 扩展或 11c 'extension=oci8_11g' for xampp 7.2.9
  • 下载即时客户端 32 位并设置其路径
  • 下载即时客户端 32 位 SDK 包并设置其路径
  • 将即时客户端和 SDK dll 文件复制到 xamp\\php\\ext、xampp\\php\\ 和 xampp\\appache\\bin\\
  • 下载tread safe x86 相同php版本的php-oci,然后将其文件复制到php\\ext*.dll,php版本写在xampp admin的phpinfo选项卡之上。
  • OCI8 将出现在 phpadmin 页面或 apache admin 然后 phpadmin 选项卡上。 这意味着已经安装了 phpOCI。

从适用于 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环境变量中,放在最左边的地方。

然后重启你的服务器。

我知道我在这里回复为时已晚,但我尝试了所有方法,但两天没有任何效果,然后我找到了这个视频。 它解决了我的问题。 所以我把这个分享给大家。 快乐编码:-)

在此处输入链接描述

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

<?php 
phpinfo();
?> 

phpinfo() 详细信息

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

即时客户端包 - 基本

即时客户端包 - 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

环境变量

5 - 重新启动您的电脑

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

OCI8

在此输入图像描述

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM