【问题标题】:Impossible to load pdo driver on Windows Server 2016无法在 Windows Server 2016 上加载 pdo 驱动程序
【发布时间】:2018-07-05 14:56:21
【问题描述】:

我正在尝试在 windows server 2016(64 位)上加载 firebird 数据库的 pdo 驱动程序。

接下来是配置:

  • 32 位 Firebird 已成功安装。
  • Apache 2.4 已成功安装(Apachelounge 二进制文件,32 位)。
  • Apache 配置正确设置(安装在 C:/Apache24 中)
  • PHP 32 位已成功安装(在 C:/PHP 中)作为带有 mod_php 的模块(apache 处理程序 2.0)。

作为证明: phpinfo result

我可以执行 PHP 文件。现在我想安装 PDO 驱动程序,以便轻松连接到 firebird 数据库。

我按照在互联网上找到的程序(取消注释 php.in 中的 extension=php_pdo_firebird.dll 并在 C/apache24/binC/apache24/binc/php 中添加 fb.client.dll)并检查是否使用此命令正确安装了 PDO:

php -m|findstr -i pdo_

这显示了我:PDO_Firebird

但是当我在 test.php 文件中调用 phpinfo 函数时,它并没有显示任何 PDO 驱动程序已加载。它说:

PDO drivers : no values.

这很奇怪,因为对于 PHP,驱动程序就在那里。 因此,在对互联网进行了一些研究后,我尝试了以下不起作用的方法:

  • 在路径中添加C/PHPC:/Apche24/bin
  • fbclient.dll 复制到C:/Apache/binC:/PHP 甚至C:/PHP/ext
  • php.ini 中取消注释"extension_dir = "ext""
  • 对于同一行将"ext"的值更改为"C:/PHP/ext"
  • 重启服务器

尝试使用 php 文件连接到 firebird 数据库时出现错误:

致命错误:未捕获的 PDOException:在 C:\Apache24\htdocs\test3.php:10 中找不到驱动程序 堆栈跟踪:#0 C:\Apache24\htdocs\test3.php(10): PDO->__construct('firebird:dbname...', 'SYSDBA', 'masterkey', Array) #1 {main} 抛出C:\Apache24\htdocs\test3.php 第 10 行

当然我不能使用 PDO 驱动程序和使用 FB/IB 扩展,但我不想这样做。

欢迎任何帮助或建议。

fb.client.dll 只是拼写错误,实际上文件名是 fbclient.dll。

对于 php_interbase.dll,我在 php/ext 文件夹中找到了它。我还尝试在 php.ini 文件中添加 extension=php_interbase.dll ,现在当我输入 cmd 时: php -m|findstr -i pdo_ 我得到了接下来的东西: - PDO - PDO_Firebird

但仍然使用 phpinfo() 函数,即使在重新启动 Apache 后,我也会得到 PDO 驱动程序的“无价值”。

php --ini 显示这个: 配置文件 (php.ini) 路径:C:\Windows 加载的配置文件:C:\PHP\php.ini 在以下位置扫描其他 .ini 文件:(无) 解析的其他 .ini 文件:(无)

而我编辑的php.ini的路径是C:\PHP\php.ini

【问题讨论】:

  • 你是加了fbclient.dll,还是真的叫fb.client.dll(这是错的)?你也有php_interbase.dll吗?
  • 你编辑的php.ini的路径是什么? php --ini 显示了什么?
  • 您可以尝试在您的 php 文件夹中运行 pgp-cgi.exe 文件,看看它是否会显示任何错误?这通常是查看您的驱动程序 (.dll) 是否丢失和/或它们是否设置了不正确的路径的最简单方法
  • 我编辑了最初的帖子来回答你。对于 php-cgi.exe,当我运行它时,它什么也不显示
  • 已解决!伙计们会笑话我的。我到处寻找问题,但实际上问题是如此简单,以至于我看不到它。在 httpd.conf 中,在文件末尾添加 PHPIniDir "c:/php" 时,我实际上添加了 PHPIniDir "c/php"。真可惜 !但最后还是抓住了。感谢您的帮助。如何将此标记为“已解决”?

标签: php apache pdo driver firebird


【解决方案1】:

解决了! 伙计们会笑话我的。我到处寻找问题,但实际上问题是如此简单,以至于我看不到它。在 httpd.conf 中,在文件末尾添加 PHPIniDir "c:/php" 时,我实际上添加了 PHPIniDir "c/php"。真可惜 !但最后还是抓住了。感谢您的帮助。

【讨论】:

    【解决方案2】:

    就我而言,原因要复杂一些。

    给定:

    1. Windows10-64/Apache24-64/PHP8-64。
    2. php -r "$s=new PDO(dsn, user, pass)" 运行良好,没有错误。 页面上的相同表达式会引发异常“未找到驱动程序”。
    3. php -i 列出 PDO Firebird 驱动程序和 dll 的版本。 页面上的 phpinfo() 根本没有显示 PDO 驱动程序。

    解决方案是复制 fbclient.dll(当然是 64 位)不仅在 PHP 目录中,而且在 Apache/bin 中!

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 2017-06-28
      • 2015-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 2016-12-04
      • 1970-01-01
      相关资源
      最近更新 更多