调用未定义的函数oci_connect,php_oci8_11g.dll,windows 10,php5.6.24

时间:2016-11-28 11:33:35

标签: php oracle oracle11g oci

我有一个简单的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() 

2 个答案:

答案 0 :(得分:3)

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

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

function dataservice(){

        var sendarr = [];

        var addData = function(newObj) {
            sendarr.push(newObj);
        };

        var getData = function(){
            return sendarr;
        };

        return {
            addData: addData,
            getData: getData
        };

    }

如果没有与PHP匹配的下载,则它不存在,您需要自己编译。有关详情,请访问http://windows.php.net

旁注:除了上述内容,您一次只能使用一个oci扩展名。你有两个(php_oci8.dll和php_oci8_11g.dll)。确保删除不需要的那个。

答案 1 :(得分:0)

您一次只能启用其中一项: whereNot 它们都启用相同的OCI8扩展,但它们需要不同的Oracle Instant Client版本。您说您正在使用Instant Client 11.2,因此请注释掉第一个扩展程序。

确保将Instant Client目录添加到 extension=php_oci8.dll extension=php_oci8_11g.dll