Installer une extension PHP sous Windows

Il existe deux moyens de charger une extension PHP sous Windows : soit la compiler dans PHP, soit charger une DLL. Charger une extension précompilée est la méthode la plus pratique et la plus recommandée.

Pour charger une extension, son fichier .dll doit être disponible sur le système. Toutes les extensions sont automatiquement et périodiquement compilées par le groupe PHP (voir la section de téléchargements).

Pour compiler une extension dans PHP, se référer à la documentation sur la compilation des sources.

Pour compiler une extension autonome, (c'est-à-dire un fichier DLL), se référer à la documentation sur la compilation des sources. Si le fichier DLL est absent de la distribution PHP et de PECL, il pourrait être necessaire de le compiler avant de pouvoir l'utiliser.

Où trouver une extension ?

Les extensions PHP sont généralement appelées php_*.dll (où les astérisques représentent le nom de l'extension) et elles sont rangées dans le dossier PHP\ext.

PHP est livré avec les extensions qui sont les plus utiles à la majorité des utilisateurs. Elles sont appelées des extensions intégrées, ou bundled.

Cependant, si les extensions intégrées ne fournissent pas la fonctionnalité nécessaire, une extension qui le fait peut être trouvée dans » PECL. Le PHP Extension Community Library (PECL, aussi dit Bibliothèque d'Extensions Communautaires de PHP) est un dépôt pour les extensions PHP, fournissant un répertoire de toutes les extensions connues et des facilités d'hébergement pour le téléchargement et le développement d'extensions PHP.

Si une extension a été développée pour un usage particulier, elle peut être hébergée sur PECL afin que d'autres personnes ayant les mêmes besoins puissent en bénéficier. Un effet secondaire intéressant est que c'est une bonne occasion de recevoir des commentaires, (avec un peu de chance) des remerciements, des rapports de bogues et même des correctifs. Avant de soumettre une extension pour hébergement sur PECL, merci de lire » PECL submit.

Quelles extensions télécharger ?

Il existe souvent plusieurs versions de chaque DLL :

  • Différents numéros de versions (au moins, les deux premiers chiffres doivent être les mêmes)
  • Différentes configurations de sécurité de threads
  • Différentes architectures de processeurs (x86, x64...)
  • Différentes configurations de débogage
  • etc.

Il est recommandé de choisir les extensions pour qu'elles soient adaptées à la machine serveur sur laquelle PHP est utilisé. Le script suivant va afficher toutes les configurations PHP :

Exemple #1 Appel de la fonction phpinfo()

<?php
phpinfo
();
?>

Ou bien, en ligne de commande :

drive:\path\to\php\executable\php.exe -i

Charger une extension

Le moyen le plus courant pour charger une extension PHP est de l'inclure dans le fichier de configuration php.ini. Il est à noter que de nombreuses extensions sont déjà présentes dans le fichier php.ini et qu'il suffit simplement de supprimer le point-virgule pour les activer.

À partir de PHP 7.2.0, le nom de l'extension peut être utilisé à la place du nom de l'extension. Comme il est indépendant de l'os et plus facile, en particulier pour les nouveaux arrivants, il devient la manière recommandée de spécifier des extensions à charger. Les noms de fichiers restent pris en charge pour la compatibilité avec les versions antérieures.

;extension=php_extname.dll
extension=php_extname.dll
; À partir de PHP 7.2, favoriser :
extension=extname
zend_extension=another_extension

Cependant, certains serveurs Web sont déroutants, car ils n'utilisent pas le fichier php.ini rangé avec l'exécutable PHP. Pour en savoir plus sur le véritable php.ini utilisé, il est possible de rechercher son emplacement à l'aide de phpinfo():

Configuration File (php.ini) Path   C:\WINDOWS
Loaded Configuration File   C:\Program Files\PHP\8.2\php.ini

Après activation d'une extension, sauvegardez le fichier php.ini, et relancez le serveur Web, puis vérifiez à nouveau le fichier phpinfo(). La nouvelle extension devrait y avoir sa section.

Résolution de problèmes

Si l'extension n'apparaît pas dans phpinfo(), il convient de vérifier les logs pour savoir d'où vient le problème.

Si PHP est utilisé en ligne de commande (CLI), l'erreur de chargement de l'extension devrait être lisible directement sur l'écran.

Si PHP est utilisé sur un serveur Web, la position et le format des logs varient grandement d'un serveur à l'autre. Lire la documentation du serveur Web pour savoir où ils sont : PHP n'a aucun control sur cet emplacement.

Les problèmes les plus courants sont la localisation du fichier DLL et les DLLs dont il dépend, la valeur de la directive "extension_dir" dans le php.ini et les incohérences de compilations.

Si le problème est une incohérence de compilation, la DLL téléchargée n'est probablement pas la bonne. Essayez d'en télécharger une nouvelle, avec les bonnes configurations du serveur. phpinfo() sera fortement utile.

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