{{tag>dev php php7 erreur debug todo}}
====== Php7: Fonction dl() indéfinie =======
Cette erreur a été rencontrée lors de la migration d'une application web fonctionnant normalement sous Apache/ PHP5 vers une version plus récente Apache/PHP7
Le message d'erreur obtenu:
Fatal error: Uncaught Error: Call to undefined function dl() in /srv/opencourrier/web/php/pear/DB.php:710
Malgré la modification de la configuration de l’hôte virtuel Apache, et l'activation explicite de l'usage de **dl()** et la désactivation de l'option **safe_mode** via les directives:
# safe_mode n'est plus utilisé par PHP >= 5.4.0
php_admin_flag safe_mode Off
# pear utilise la fonction dl()
php_admin_flag enable_dl On
L'appel de phpinfo() affiche bien **enable_dl = On** mais l'erreur persiste. La documentation PHP indique que dans de nombreuses SAPIs la fonction dl() a été retirée. C'est le cas pour la version PHP-FPM de PHP 7.0.0.
La fonction dl() n'est donc plus utilisable via le module Apache PHP7, il faut charger les modules via les directives de chargement d'extension ou utiliser la version CLI en exécutant les scripts via fastcgi.
Les solutions:
* Charger l'extension dans le fichier php.ini et supprimer l'appel de dl() dans le code.
* Utiliser une des SAPI's mentionnée dans la documentation autorisant encore la fonction dl(): comme CLI, CGI ou Embed)
* Downgrader PHP si le chargement dynamique est nécessaire.
===== Références =====
* https://www.php.net/manual/en/function.dl.php
* https://www.php.net/manual/en/ini.core.php#ini.extension
* https://stackoverflow.com/questions/16163525/call-to-undefined-function-dl
* https://stackoverflow.com/questions/23321274/how-enable-dl-configuration-in-php-can-be-useful