In order for php to see extensions, it is necessary to specify the root folder when specifying the address to the directory with extensions in php.ini. For example extension_dir = "php/ext"
В ОС 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-модуль выбирают по следующим признакам:
И другие характеристики
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().
In order for php to see extensions, it is necessary to specify the root folder when specifying the address to the directory with extensions in php.ini. For example extension_dir = "php/ext"
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).
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.
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.