【问题标题】:Call to undefined function ocilogon() - IIS 7.5 - Windows 2008 R2 x64 - PHP 7.2.7调用未定义函数 ocilogon() - IIS 7.5 - Windows 2008 R2 x64 - PHP 7.2.7
【发布时间】:2026-01-25 06:20:04
【问题描述】:

我正在将网站从开发环境(Angular 4 - WAMP Server - PHP 5.6.35)迁移到生产环境。在开发中,Angular 4 应用程序能够成功连接到 PHP 脚本并运行 Oracle 存储过程,因此代码没有问题。

在生产中,我必须使用 Web 平台安装程序安装 PHP 才能成功运行 PHP 站点,其中 phpinfo() 显示“PHP 版本 7.2.7”。我运行应用程序,当它尝试运行 PHP 脚本时,运行脚本时出现 500 Internal Server 错误。 PHP错误日志显示:

<b>Fatal error</b>:  Call to undefined function ocilogon() in <b>C:\inetpub\wwwroot\app\assets\scripts\php\pullData.php</b> on line <b>154</b><br />

研究表明问题可能是:

  1. 可能的 IIS 配置问题
  2. Oracle Instant Client 问题
  3. OCI8 PHP 库未启用

我想我已经排除了 IIS 配置,因为前端连接到 PHP 并运行脚本没有问题。

Oracle Instant Client 12.1 已安装,其他应用程序可以连接到 Oracle。 PATH 环境变量似乎设置正确。我不知道它是 32 位还是 64 位版本 - 或者这是否会有所不同。

我认为这是问题所在 - OCI8 库未正确启用。在开发服务器上,我能够修改 php.ini 文件以取消注释(并启用)dll,并且 phpinfo() 在列表中显示 OCI8 库:

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

在生产中,我不得不手动添加“extension=php_oci8_12c.dll”行(它没有被取消注释),并且我检查了 PHP 的 EXT 文件夹并且 dll 存在那里。 Phpinfo() 仍然没有显示启用了 OCI8 库。

【问题讨论】:

    标签: php oracle iis-7.5 windows-server-2008-r2


    【解决方案1】:

    问题已解决,我采取了以下步骤来解决它:

    1. 已卸载 PHP(删除了所有 PATH 引用和文件夹)。
    2. 使用 Oracle Universal Installer 卸载了 Oracle Instant Client。
    3. 使用 IIS Web 平台安装程序为 IIS Express(和所有依赖项)安装了 PHP。
    4. 使用自动安装程序 (winx64_12102_client.zip) 安装 Oracle Instant Client 12c,而不是 ZIP 文件。这样我就不必手动添加 PATH 变量等。
    5. 使用 phpinfo() 检查 PHP 版本(以及它是否是线程安全的)。线程安全被禁用。从 windows.php.net (https://windows.php.net/downloads/pecl/releases/oci8/2.1.8/) 下载了 php_oci8_12c.dll 的非线程安全 (nts) 版本,并将内容复制到 PHP 安装目录中的 EXT 文件夹(位于 IIS Express 的父文件夹中)。
    6. 编辑了 PHP.ini 文件(php.ini-production 和 php.ini-development 和 php.ini)以包含“extension=php_oci8_12c.dll”或取消注释“extension=oci8_12c”。
    7. 重新启动服务器(可能没有必要)。
    8. 打开 CMD 并运行代码 'php --ri oci8' 以检查 OCI8 支持是否已启用并使用我刚刚安装的 Oracle Instant Client 版本。也使用 phpinfo() 验证了这一点。
    9. 完成。 OCI 功能现在可以使用。

    这是一个艰苦的过程,因为该 Web 服务器安装了多个 Oracle Instant Client,并且在安装 PHP 5.6 及其依赖项时,IIS 的 Web 平台安装程序存在错误。我很幸运,这次安装程序没有像最初安装 PHP 5.6 时那样在 PHP 7.2 上出错。

    【讨论】:

      最近更新 更多