Установка 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-файлов, значение " extension_dir" в php.ini, а также несовпадение настроек компиляции.

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

add a note add a note

User Contributed Notes 3 notes

up
1
peteb at airpost dot net
8 months ago
This is not really true all the time:

"However, some web servers are confusing because they do not use the php.ini located alongside your PHP executable. To find out where your actual php.ini resides, look for its path in phpinfo():

Configuration File (php.ini) Path  C:\WINDOWS"

Ignore the path being C:\windows
This issue goes back over a decade. 
Php is hardwired to display "C:\windows" even though there is not any php.ini at that location. 
Moving php.ini to C:\windows will accomplish nothing. 
I have seen many posts about folks complaining that they can't get it to stop displaying "Path C:\windows".  I have not seen anything posted that fixes this and a few posts that claim it is hardwired to display this. 
I have both working and broken php setups on various windows machines and they all say this same "c:\windows" even though my php.ini file is in c:\php. 
I know apache is using the file c:\php\php.ini and not the windows directory because there is no php.ini in windows directory and changes to my php.ini file work fine even though the info from phpinfo is wrong on this line.
up
-1
Robert Dinion
2 years ago
For Windows try setting the  extension_dir set to a complete path if you have an error.
Only having
extension_dir ="ext"
did not work for me.
The Apache error log showed it looking for ext\\<extension.dll> and unable to find it.
; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
extension_dir = "C:\php\ext"
up
-4
Chris
2 years ago
In xampp. After removing the semicolon from the php.ini file, I had to stop the the apache server from the xampp GUI and restart it. Then I used the following code to view all the loaded extentions and my extension was shown there as well.

print_r(get_loaded_extensions());

Hope this helps!
To Top