【发布时间】:2015-05-29 06:07:47
【问题描述】:
我有一个简单的 php 脚本:
<?php
$db_user = 'myusername';
$db_pass = 'mypassword';
$db_sid = 'mysid';
$conn = oci_connect( $db_user, $db_pass, $db_sid );
?>
当我(从浏览器或命令行)运行它时,我得到了错误:
Call to undefined function oci_connect
我正在使用 php_oci8_12c.dll 附带的 php 5.6.6。
我的 php.ini 中有 extension=php_oci8_12c.dll
我已经安装了即时客户端 (12.1) - 尝试了 32 位版本和 64 位版本
我有 ORACLE_HOME 和 TNS_ADMIN 环境变量指向即时客户端文件夹 ( C:\instantclient_12_1 )。
我的路径中也有 C:\instantclient_12_1
我在同一个文件夹中有一个 tnsnames.ora,其中包含以下相关条目:
MYSID =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhost.net)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MYSERVICE)
)
)
我也从http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html下载了SQLDeveloper
SQLDeveloper 工作,识别上述 tnsnames.ora 并连接并成功在我的 php 脚本试图访问的同一数据库上运行查询。
我在几天内花了几个小时尝试不同的事情,但无济于事。
我正在使用:
php 5.6.6
windows 8.1
IIS (so no answers involving apache please)
cmd (run as administrator)
Oracle Database 11g Enterprise Edition 11.2.0.3.0
其他一些可能有用的信息:
理想情况下,我希望使用 oci 1.4.10 来匹配生产服务器,但暂时不用太担心。
pear install oci8-1.4.10.tgz
给我这个错误:
The DSP oci8.dsp does not exist
我找不到任何对我来说意义重大的错误解释。
我错过了什么 - 任何人都可以帮助我
编辑:
我已经尝试过stackoverflow其他帖子中的各种建议,即:
extension=oci8.so 有和没有extension=php_oci8_12c.dll
我的 php.ini 文件中没有 extension=php_oracle.dll 行
编辑:
phpinfo 告诉我我使用了正确的 php.ini 文件:
Loaded Configuration File => C:\php5.6.6\php.ini
phpinfo 中的这一行也可能有用:
Configure Command => cscript /nologo configure.js "--enable-snapshot-build" "--enable-debug-pack" "--disable-zts" "--disable-isapi" "--disable-nsapi" "--without-mssql" "--without-pdo-mssql" "--without-pi3web" "--with-pdo-oci=c:\php-sdk\oracle\x86\instantclient_12_1\sdk,shared" "--with-oci8-12c=c:\php-sdk\oracle\x86\instantclient_12_1\sdk,shared" "--with-enchant=shared" "--enable-object-out-dir=../obj/" "--enable-com-dotnet=shared" "--with-mcrypt=static" "--without-analyzer" "--with-pgo"
编辑:
似乎 dsp 文件是 VC++ 项目文件 - 我现在正在冒险学习如何创建一个 php 扩展,希望当我完成后我将有足够的知识将 oci8 1.4.10 源代码编译成一个适用于 Windows 8 的 dll - 除非有人用这个问题的答案来救我 - 这看起来需要我一些时间:-)
编辑:
将display_startup_errors = On 添加到 php.ini 告诉我 oci dll 不是有效的 Win32 应用程序
【问题讨论】:
-
请查看链接:- stackoverflow.com/questions/22478387/…。 (第二个答案)。或stackoverflow.com/questions/8635881/…。 (第一个答案)
-
检查您的路径中是否有
msvcr71.dll的副本。 -
过去没有 - 现在 - 没有区别
-
在命令提示符下运行
php --ri oci8的结果是什么?如果您可以提供 PHP 的包名称(或下载链接)和您正在使用的即时客户端,我将尝试重现该问题。 -
php --ri oci8给我Extension 'oci8' not present
标签: php oracle oracle11g oracle-call-interface