【问题标题】:Call to undefined function oci_connect, php_oci8_11g.dll , windows 10, php5.6.24调用未定义函数 oci_connect, php_oci8_11g.dll , windows 10, php5.6.24
【发布时间】:2017-04-12 02:49:30
【问题描述】:

我有一个简单的 php 脚本:

<?php


            $DB = '//10.11.201.170:1521/XE';
            $DB_USER = 'BIOTPL';
            $DB_PASS = 'biotpl';
            $DB_CHAR = 'AL32UTF8';

            $conn = oci_connect($DB_USER, $DB_PASS, $DB, $DB_CHAR);
            if($conn)
            {
                echo "Successfully connected to Oracle.\n";
                OCILogoff($c);
                //$statement = oci_parse($conn, 'select 1 from dual');
                //oci_execute($statement);
                //$row = oci_fetch_array($statement, OCI_ASSOC+OCI_RETURN_NULLS);
            }
            else
            {
                $err = OCIError();
                echo "Connection failed." . $err[text];
            }  
?>

当我运行它时(从浏览器或命令行),我得到错误::

Call to undefined function oci_connect

我正在使用 php 5.6.24 。我已将 php_oci8.dll 和 php_oci8_11g.dll 复制到 /ext 文件夹。我有

extension=php_oci8.dll 
extension=php_oci8_11g.dll  

在我的 php.ini 中 我已经安装了即时 client_11_2 - 试用过的 32 位版本。我有 ORACLE_HOME 和 TNS_ADMIN 环境变量指向即时客户端文件夹 ( C:\instantclient_11_2 )。

我在几天内花了几个小时尝试不同的事情,但无济于事。

我已安装 Microsoft Visual C++ 2010 Runtime (x86)。这是 OCI8 扩展所必需的。我已经安装了 Microsoft Visual C++ 2012 Runtime (x86)。这是 PHP 所需要的。

当我尝试了以下命令时:

php --ri oci8

我有以下错误:

PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\xampp\php\ext\php_oci8.dll' - %1 is not a valid Win32 application.
 in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'C:\xampp\php\ext\php_oci8.dll' - %1 is not a valid Win32 application.
 in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\xampp\php\ext\php_oci8_11g.dll' - %1 is not a valid Win32 application.
 in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'C:\xampp\php\ext\php_oci8_11g.dll' - %1 is not a valid Win32 application.
 in Unknown on line 0
Extension 'oci8' not present.

如何消除以下错误?

Fatal error: Call to undefined function oci_connect() 

【问题讨论】:

    标签: php oracle oracle11g oracle-call-interface


    【解决方案1】:

    您收到 OCI8 扩展的启动错误,表明您正在为您的 php 版本使用不受支持的 dll。您需要使用正确的,对于 PHP 5.6.x,它是其中之一:

    您需要选择与您的架构(x86 或 x64)、编译器(vc 9、11、14)和线程安全 (ts) 或非线程安全 (nts) php 版本相匹配的版本,例如如果您在 x86 上运行使用 vc11 编译的线程安全 PHP 5.6.24,您将使用

    php_oci8-2.0.8-5.6-ts-vc11-x86.zip
    -------- ----- --- -- ---- --- ---
    ^        ^     ^   ^  ^    ^   ^
    |        |     |   |  |    |   \_____ extension
    |        |     |   |  |    \_________ architecture
    |        |     |   |  \______________ compiler
    |        |     |   \_________________ thread-safety mode
    |        |     \_____________________ php version
    |        \___________________________ extension version
    \____________________________________ extension name
    

    如果没有与你的PHP匹配的下载,那么它不存在,你需要自己编译。更多信息http://windows.php.net

    附带说明:除上述之外,您一次只能使用一个 oci 扩展。你得到了(php_oci8.dll 和 php_oci8_11g.dll)。确保删除不需要的那个。

    【讨论】:

    • 我已经下载了 php_oci8-2.0.8-5.5-ts-vc11-x64.zip 。然后在提取 dll 后,我将 dll 粘贴到 C:\xampp\php\ext 。但仍然是同样的错误。
    • 您在聊天中向我展示的 phpinfo 输出表明您正在 x86 上运行线程安全的 PHP。您的问题表明您使用的是 PHP 5.6。您需要为您的 php 版本使用正确的扩展名。
    • 有用的一般信息,但可能不是这个特定问题的全貌。
    • @ChristopherJones 可能不是全部情况,而是基本情况:OP 没有为他的 PHP 版本使用正确的扩展名(从启动错误中可以看出)。在这种特殊情况下,两个扩展都有错误的版本。我把它留给了 OP 来修复正确的。显然,这足以让 OP 将答案勾选为已接受(他还确认它在聊天中有效)。仅仅删除不需要的扩展并不能解决问题。对于这个 php 版本,它仍然是错误的扩展版本。
    • @Gordon 这是评论而不是批评。我看到您已将我的部分答案复制到您的编辑中,但只要用户获得正确的信息,这就是主要的。
    【解决方案2】:

    您一次只能启用其中一项: extension=php_oci8.dll extension=php_oci8_11g.dll 它们都启用相同的 OCI8 扩展,但需要不同的 Oracle Instant Client 版本。你说你使用的是 Instant Client 11.2,所以注释掉第一个扩展。

    确保将 Instant Client 目录添加到 PATH

    【讨论】:

      猜你喜欢
      • 2015-05-29
      • 2014-04-24
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 2017-05-29
      • 1970-01-01
      • 2015-11-17
      相关资源
      最近更新 更多