PHP 8.2.4 Released!

Установка PHP-модуля в Windows

В Windows есть два способа загрузки PHP-модуля: скомпилировать его вместе с PHP или загрузить DLL. Загрузка заранее скомпилированного модуля является наиболее простым и предпочитаемым способом.

Для загрузки модуля, он должен присутствовать в вашей системе в виде ".dll" файла. Все модули автоматически и периодически компилируются командой PHP (смотрите следующий раздел для загрузки).

За инструкциями по компиляции модуля в PHP обратитесь к разделу "Сборка из исходников".

Для компиляции отдельного модуля (или DLL-файла), обратитесь к разделу " Сборка из исходников". Если DLL-файла нет ни в стандартной поставке PHP ни в PECL, возможно, вам придётся скомпилировать его вручную.

Где найти модуль?

PHP-модули обычно имеют имена вида "php_*.dll" (где звёздочка обозначает имя модуля) и располагаются в папке "PHP\ext".

PHP поставляет модули наиболее полезные большинству разработчиков. Такие модули называются "основными" ("core").

Однако, если вам требуется функционал, который не предоставляется ни одним из основных модулей, возможно, нужный вам модуль есть в » PECL. Библиотека модулей сообщества PHP (The PHP Extension Community Library, 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
; В PHP 7.2 и выше лучше делать так:
extension=extname
zend_extension=another_extension

Однако, некоторые веб-серверы создают путаницу, т.к. они не используют php.ini, расположенный в дистрибутиве PHP, а используют свой собственный. Узнать, где находится, используемый сервером php.ini, можно посмотрев на выводимый путь в phpinfo():

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

После активации модуля сохраните php.ini, перезагрузите веб-сервер и снова проверьте phpinfo(), в нем должен появиться отдельный раздел с новым модулем.

Решение проблем

Если модуль не появился в выводе phpinfo(), проверьте лог-файлы на наличие сообщений об ошибках.

Если вы используете PHP в командной строке (CLI), ошибки загрузки модуля будут доступны сразу же на экране.

Если вы используете PHP на веб-сервере, расположение и формат лог-файлов сильно зависит от используемого вами веб-сервера. Пожалуйста, обратитесь к документации вашего веб-сервера, т.к. в данном случае эта ситуация не управляется самим PHP.

Распространёнными проблемами являются расположение библиотеки DLL и DLL-файлов, от которых она зависит, значение " extension_dir" в php.ini, а также несовпадение настроек компиляции.

Если проблемой является несовпадение настроек компиляции, то возможно, вы скачали не тот DLL-файл. Попробуйте снова скачать модуль, на этот раз с правильными настройками. Ещё раз, информация функции phpinfo() сильно помогает в этом случае.

add a note

User Contributed Notes 3 notes

up
2
ferdnyc at gmail dot com
6 months ago
This is handwaved somewhat in the "Resolving problems" section, but mis-location of (non-extension) DLL files is often a problem when installing PHP extensions on Windows.

Many PHP extensions come with not only the extension DLL, but supplementary DLLs that are required by that extension. (For example, php_luasandbox.dll comes with lua5.1.dll, the lua interpreter it sandboxes.) Those other DLLs should go into the same directory as the php.exe binary, NOT the extension directory.

So, if php_luasandbox.dll is installed at C:\PHP8.1\ext\php_luasandbox.dll, the interpreter would be located at C:\PHP8.1\lua5.1.dll. That allows the PHP binary C:\PHP8.1\php.exe to find those additional DLLs when required.
up
1
dario at 4assistance dot com
2 months ago
On windows, drop your extension's dependencies into a dir of your choice, but outside of your php install. Add that dir to a path environment variable used by your php. Add <extension_name>.dll to your php's extension_dir, and update your php.ini (unless you're simply testing with php's cli).
up
-1
bk at kaelberer-aio dot de
1 month ago
In addition to the helpful comments of ferdnyc and dario: A few weeks ago I've set up a new W11 using PHP 8.1. (as a module) with Apache. It was working fine.
Today i wanted to install the PECL-extension php-amqp. This extension comes with two additional files that are said to be placed in PHPs main directory. It worked fine running from the command prompt but with Apache the extension failed with "Unable to load dynamic library 'amqp'".
I tried 100 ways to notate paths in php.ini and http.conf: c:, C:, \, \\, /, ". I also installed a new PHP in the root to get rid of the space in the path. It did not help.
When reading dario's comment i stumbeled across him mentioning "path environment variable". I checked that in Window's settings and I realized, that i had added PHP's path to the USER'S path-settings, but not to the SYSTEM'S path. That is why it worked in the command prompt but not when starting Apache as a service. After adding it there it worked fine.
To Top