Встановлення розширень 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 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