Установка 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().