在 Windows 上安装 PHP 扩展

在 Windows 上加载 PHP 扩展有两种方法:将它编译到 PHP 中,或加载 DLL。加载预编译的扩展是最简单且首选的方式。

要加载扩展,它必须以 .dll 文件的形式存在于系统上。所有扩展都会由 PHP Group 自动定期编译(有关下载,请参见下一节)。

要将扩展编译到 PHP 中,请参阅 从源代码构建 文档。

要编译独立扩展(即 DLL 文件),请参阅 从源代码构建 文档。如果 DLL 文件既不在 PHP 发行版中也不在 PECL 中,则可能需要在使用扩展之前对其进行编译。

在哪里可以找到扩展?

PHP 扩展通常被称为 php_*.dll(其中星号表示扩展的名称),它们位于 PHP\ext 文件夹下。

PHP 附带了对大多数开发人员最有用的扩展。它们被称为捆绑扩展。

但是,如果捆绑的扩展没有提供所需的功能,则仍然可以在 » PECL 中找到一个提供该功能的扩展。PHP 扩展社区库 (PECL) 是 PHP 扩展的存储库,提供所有已知扩展的目录,并为下载和开发 PHP 扩展提供托管设施。

如果为特定用途开发了扩展,则可能会在 PECL 上托管,以便具有相同需求的其他人可以从中受益。一个很好的副作用是,这很有可能获得反馈(希望是)感谢、错误报告甚至修复/补丁。在提交扩展以在 PECL 上托管之前,请阅读 » PECL 提交

下载哪个扩展?

很多时候,每个 DLL 会有几个版本可用

  • 不同的版本号(至少前两个数字应该匹配)
  • 不同的线程安全设置
  • 不同的处理器架构(x86、x64、...)
  • 不同的调试设置
  • 等等。

请记住,扩展设置应与正在使用的 PHP 可执行文件的设置匹配。以下 PHP 脚本将告诉您有关 PHP 设置的所有内容

示例 #1 phpinfo() 调用

<?php
phpinfo
();
?>

或者从命令行运行

drive:\path\to\php\executable\php.exe -i

加载扩展

加载 PHP 扩展最常见的方法是将其包含在 php.ini 配置文件中。请注意,许多扩展已经存在于 php.ini 中,并且只需要删除分号即可激活它们。

注意,从 PHP 7.2.0 开始,可以使用扩展名称而不是扩展的文件名。由于这与操作系统无关且更易于使用,尤其是对于新手来说,它成为指定要加载扩展的推荐方式。文件名为了与早期版本兼容而仍然支持。

;extension=php_extname.dll
extension=php_extname.dll
; As of PHP 7.2.0, prefer:
extension=extname
zend_extension=another_extension

但是,一些 Web 服务器令人困惑,因为它们不使用与 PHP 可执行文件位于同一位置的 php.ini。要找出实际的 php.ini 所在位置,请在 phpinfo() 中查找其路径

Configuration File (php.ini) Path  C:\WINDOWS
Loaded Configuration File   C:\Program Files\PHP\8.2\php.ini

激活扩展后,保存 php.ini,重启 Web 服务器,并再次检查 phpinfo()。新扩展现在应该有它自己的部分。

解决问题

如果扩展没有出现在 phpinfo() 中,则应检查日志以了解问题来自哪里。

如果从命令行 (CLI) 使用 PHP,则可以在屏幕上直接读取扩展加载错误。

如果使用 Web 服务器使用 PHP,则日志的位置和格式会因软件而异。请阅读 Web 服务器文档以查找日志,因为它与 PHP 本身无关。

常见问题是 DLL 的位置及其依赖的 DLL、php.ini 中的 "extension_dir" 设置的值以及编译时设置不匹配。

如果问题在于编译时设置不匹配,则可能是下载的 DLL 不正确。尝试使用正确的设置再次下载扩展。同样,phpinfo() 可以提供很大帮助。

添加注释

用户贡献的注释 4 个注释

j dot o dot l dot a dot n at bk dot ru
7 个月前
为了让 php 看到扩展,在 php.ini 中指定扩展目录的地址时,需要指定根文件夹。例如 extension_dir = "php/ext"
bk at kaelberer-aio dot de
1 年前
除了 ferdnyc 和 dario 的有用评论之外:几周前,我在使用 PHP 8.1 的新 W11 上设置了 Apache(作为模块)。它运行良好。
今天我想安装 PECL 扩展 php-amqp。此扩展附带两个额外的文件,据说应该放在 PHP 的主目录中。从命令提示符运行它可以正常工作,但在 Apache 中,扩展失败,显示“无法加载动态库 'amqp'”。
我尝试了 100 种方法来在 php.ini 和 http.conf 中表示路径:c:、C:、\、\\、/、"。我还将 PHP 安装在根目录中以消除路径中的空格。它没有帮助。
当我阅读 dario 的评论时,我偶然发现他提到了“路径环境变量”。我检查了 Windows 设置中的那个变量,我意识到,我已经将 PHP 的路径添加到了用户的路径设置中,但没有添加到系统的路径中。这就是为什么它在命令提示符中可以工作,但在将 Apache 作为服务启动时却无法工作。在将它添加到系统路径之后,它运行良好。
dario at 4assistance dot com
1 年前
在 Windows 上,将扩展的依赖项放到您选择的目录中,但不要放到 php 安装目录中。将该目录添加到 PHP 使用的路径环境变量中。将 <扩展名称>.dll 添加到 php 的 extension_dir 中,并更新您的 php.ini(除非您只是使用 php 的 cli 进行测试)。
ferdnyc at gmail dot com
1 年前
这在“解决问题”部分中被略微带过了,但在 Windows 上安装 PHP 扩展时,(非扩展)DLL 文件的位置错误通常是一个问题。

许多 PHP 扩展不仅附带扩展 DLL,还附带该扩展所需的补充 DLL。(例如,php_luasandbox.dll 附带 lua5.1.dll,它对 lua 解释器进行沙盒化。)这些其他 DLL 应该放在与 php.exe 二进制文件相同的目录中,而不是扩展目录。

因此,如果 php_luasandbox.dll 安装在 C:\PHP8.1\ext\php_luasandbox.dll 中,则解释器将位于 C:\PHP8.1\lua5.1.dll 中。这允许 PHP 二进制文件 C:\PHP8.1\php.exe 在需要时找到这些其他 DLL。
To Top