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

Существует два способа загрузки PHP-модуля в Windows (здесь идёт речь не о скачивании модуля, а о том, чтобы PHP применял его в работе): скомпилировать его вместе с PHP или загрузить DLL. Загрузка заранее скомпилированного модуля — самый простой и рекомендуемый способ.

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

Чтобы скомпилировать модуль внутри PHP, обратитесь к разделу документации «Сборка из исходников».

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

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

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

PHP поставляется с наиболее полезными для большей части разработчиков модулями. Такие модули называются входящими в комплект (“bundled”).

Однако, если входящие в комплект модули не дают нужной функциональности, нужный модуль всё ещё может быть найден на сайте » 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\8.2\php.ini

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

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

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

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

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

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

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

add a note add a note

User Contributed Notes 3 notes

up
5
peteb at airpost dot net
3 years 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
-2
Robert Dinion
5 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
5 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