Встановлення розширень PHP на Windows

На Windows, ви маєте два варіанта для завантаження розширень PHP: або компілювати їх в PHP, або завантажити DLL. Завантаження вже компільованих розширень є простішим та рекомендованим варіантом.

Щоб підключити розширення, вам потрібно мати доступний файл ".dll" на вашій системі. Всі розширення автоматично та періодично компілюються Групою PHP (дивіться наступний блок для завантажень).

Щоб компілювати розширення в PHP, ознайомтесь з документацією Збірка із сирців.

Для компіляції окремого розширення (тобто файлу DLL), ознайомтесь з документацією Збірка із сирців. Якщо DLL-файла немає ні в дистрибутиві PHP, ні в PECL, вам потрібно самостійно скомпілювати це розширення перед його використанням.

Де можна знайти розширення?

Розширення PHP зазвичай мають назву "php_*.dll" (де зірочкою позначено назву розширення) та розміщені в директорії "PHP\ext".

PHP поставляється з найбільш корисними розширеннями для більшості розробників. Вони називаються "core" (тобто основними) розширеннями.

Тим не менше, якщо вам потрібна функціональність, яку не надає жодне із основних розширень, вам ще можна пошукати його в PECL. PHP Extension Community Library (PECL), що перекладається як Бібліотека Розширень Спільноти PHP, є сховищем Розширень PHP, що надає місце під хостинг всім відомим розширенням, забезпечуючи можливість для їхнього завантаження та розробки.

Якщо ви хочете розробляти розширення для власного використання, ви можете розраховувати на розміщення його на хостингу PECL, щоб інші люди також могли отримати вигоду від його використання. Гарним побічним ефектом цього є те, що ви даєте іншим людям хороший шанс щоб вони тримали з вами зворотній зв'язок (сподіваємось) для висловлення вдячності, для звітування про неполадки та події виправлення/латання (англ. fixes/patches). Перед тим як розмістити ваше розширення на хостингу PECL, прохання прочитати » PECL submit.

Яке розширення завантажувати?

Дуже часто, ви можете знайти декілька версій кожної DLL:

  • З різними номерами версій (принаймні перші дві цифри повинні збігатись)
  • З різним налаштуванням збереження потоків (thread safety)
  • З різними архітектурами процесорів (x86, x64, ...)
  • З різним налаштуванням відладки
  • і т.д.

Також слід пам'ятати, що всі ваші налаштування розширень повинні бути відповідними до всіх налаштувань, які ви використовуєте для виконавчих файлів PHP. Наступний скрипт PHP може надати інформацію про всі ваші налаштування PHP:

Приклад #1 Виклик phpinfo()

<?php
phpinfo
();
?>

Або запустіть з командного рядка:

диск:\\шлях\до\php\php.exe -i

Завантаження розширень

Найпоширеніший способіб підключення розширення PHP - це включення його у конфігураційному файлі php.ini. Також пам'ятайте, що більшість розширень вже представлено у вашому файлі php.ini, та вам достатньо лише видалити символ крапки з комою (тобто розкоментувати їх), щоб вони стали активними.

;extension=php_extname.dll
extension=php_extname.dll

І все ж, деякі веб-сервери плутаються, оскільки не використовують 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

User Contributed Notes 4 notes

up
5
j dot o dot l dot a dot n at bk dot ru
10 months ago
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"
up
3
bk at kaelberer-aio dot de
1 year ago
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.
up
1
dario at 4assistance dot com
1 year ago
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).
up
0
ferdnyc at gmail dot com
2 years ago
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.
To Top