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

В ОС Windows PHP-модули подключают двумя способами: либо компилируют PHP с модулем, либо загружают модуль как DLL-файл. Загрузка заранее скомпилированного модуля — самый простой и предпочтительный способ.

Модуль загрузится, только если доступен в системе как файл с расширением .dll. Группа разработчиков PHP автоматически и периодически компилирует PHP-модули. Подробнее о скачивании рассказывает следующий раздел.

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

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

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

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

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

На сайте » PECL доступны модули, которые решают близкое к 100 % количество задач, поэтому хотя бы один необходимый модуль найдётся в репозитории, если встроенные модули не содержат функций, которые потребовались программисту. Библиотека модулей PHP-сообщества (англ. The PHP Extension Community Library, PECL) — каталогизированный репозиторий PHP-модулей и инфраструктура для хранения, скачивания и разработки модулей.

Одни пользователи размещают в репозитории PECL модули, которые разработали для конкретных целей, а другие пользователи, которым потребовались аналогичные функции, скачивают модули. Разработчики модулей получают шанс на обратную связь, благодарности (надеемся, что так и будет), сообщения об ошибках и даже исправление ошибок или другие полезные изменения. Примечание » на странице отправки нового PECL-модуля даёт инструкции, которые потребуется выполнить перед отправкой модуля в репозиторий PECL.

Какой модуль скачать?

DLL-модуль выбирают по следующим признакам:

  • Номер версий, в котором совпадают хотя бы две первые цифры
  • Настройки потокобезопасности
  • Архитектура процессора: x86, x64 или другая
  • Настройки отладки
  • И другие характеристики

PHP загрузит модуль, только если характеристики модуля соответствуют параметрам исполняемого 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().