Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les pilotes SQLSRV et PDO_SQLSRV sont des extensions PHP. PHP les charge lorsque le processus PHP démarre, en lisant php.ini et tout fichier .ini supplémentaire.
Le chargement est distinct de l’installation. Copier ou construire l’extension place un fichier sur le disque. PHP ne peut pas utiliser SQLSRV ou PDO_SQLSRV tant que la configuration active ne contient pas la bonne entrée et que le processus PHP n’a pas redémarré.
Protéger les pages de diagnostic web
Avant de créer une page phpinfo() temporaire, configurez le serveur web pour n’autoriser que les requêtes provenant de localhost ou les administrateurs authentifiés. Gardez cette restriction jusqu’à ce que vous supprimiez la page.
phpinfo() peut exposer les variables d’environnement, les identifiants et la configuration des serveurs. Supprimez la page suivant immédiatement la vérification.
Comprendre la portée de la configuration PHP
Chaque interface de programmation d’application serveur PHP (SAPI) peut utiliser un exécutable et une configuration différents :
| Runtime | Source de configuration typique | Comment l’identifier |
|---|---|---|
| Interface de ligne de commande (CLI) | Le php.ini et le répertoire d’analyse signalés par php --ini |
Exécutez php --ini avec l’exécutable exact |
| IIS FastCGI | L’exécutable PHP configuré dans l’application IIS FastCGI | Utiliser une page temporaire phpinfo() |
| Module Apache | Configuration du module PHP d’Apache | Utiliser une page temporaire phpinfo() |
| PHP-FPM | L’exécutable FPM, le pool, php.ini, et le répertoire de balayage |
Exécutez le binaire FPM versionné -i ou utilisez une page phpinfo() temporaire |
| Processus worker durable | L’exécutable et l’environnement qui ont lancé le worker | Inspectez le service de processus worker et redémarrez-le après les modifications |
Changer la configuration de la CLI ne modifie pas IIS, Apache ou PHP-FPM lorsqu’ils utilisent une autre installation de PHP ou un répertoire de scan.
Trouvez la configuration PHP
Exécutez ces commandes avec l’exécutable PHP utilisé par votre application :
php --ini
php -i | findstr /I "PHP Version Thread Safety Architecture extension_dir"
Sous Linux ou macOS, remplacez findstr par grep:
php -i | grep -E "PHP Version|Thread Safety|extension_dir"
file "$(php -r 'echo PHP_BINARY;')"
La file commande identifie l’architecture de l’exécutable sélectionné. Pour un exécutable universel macOS, suivez la sélection explicite de l’architecture.
Les valeurs Fichier de configuration chargé et Recherche de fichiers .ini supplémentaires dans identifient la configuration utilisée par le processus exécuté en ligne de commande. Un serveur web ou un processus PHP FastCGI Process Manager (PHP-FPM) peut utiliser un exécutable PHP ou un fichier de configuration différent. Utilisez une page temporaire phpinfo() pour identifier les valeurs associées à ce processus.
Avant de modifier un fichier, notez :
- Le chemin et la version de l’exécutable PHP.
- Le
php.inichargé. - Le répertoire d’analyse
.inisupplémentaire. - Le répertoire d’extensions.
- Le mode de sécurité des threads et l’architecture.
- Chaque processus que vous devez redémarrer.
Sauvegardez chaque fichier de configuration que vous modifiez.
Charger les pilotes sous Windows
Pour une installation avec le PHP Installer for Extensions (PIE),téléchargez et vérifiez d’abord PIE. Exécutez les commandes suivantes depuis le répertoire contenant pie.phar, avec l’exécutable PHP qui devrait charger les pilotes :
php .\pie.phar install microsoft/sqlsrv
php .\pie.phar install microsoft/pdo_sqlsrv
PIE installe php_sqlsrv.dll et php_pdo_sqlsrv.dll. Si PIE ne peut pas activer automatiquement les extensions, supprimez toutes les entrées SQLSRV et PDO_SQLSRV existantes du fichier php.ini actif, puis ajoutez :
extension=php_sqlsrv.dll
extension=php_pdo_sqlsrv.dll
Utilisez une seule entrée pour chaque pilote. Redémarrez le processus PHP après avoir modifié sa configuration.
Pour une installation ZIP, copiez dans le extension_dir répertoire les bibliothèques à liens dynamiques (DLL) qui correspondent à la version mineure de PHP, à l’architecture et au mode de sécurité des threads. Un environnement d’exécution PHP 8.5 x64 thread-safe utilise les noms de fichier suivants :
php_sqlsrv_85_ts_x64.dll
php_pdo_sqlsrv_85_ts_x64.dll
Ajoutez les deux noms de fichiers au php.ini utilisé par le processus PHP :
extension=php_sqlsrv_85_ts_x64.dll
extension=php_pdo_sqlsrv_85_ts_x64.dll
Remplacez 85, ts, et x64 par les valeurs de votre runtime PHP. Ne mélangez pas les fichiers thread-safe et non-thread-safe, les fichiers 32 bits et 64 bits, ou les fichiers conçus pour une autre version mineure PHP.
Charger les pilotes sur Linux et macOS
Installez les pilotes en utilisant PIE. Pour plus d’informations, consultez le tutoriel d’installation Linux et macOS. PIE installe les fichiers d’extension et tente de les activer en utilisant les outils de configuration PHP de la plateforme ou en ajoutant une entrée extension= à un fichier .ini supplémentaire ou au fichier php.ini standard. Si PIE indique qu’il n’a pas pu activer une extension, ajoutez vous-même l’entrée et vérifiez la configuration active.
Pour une installation manuelle, sélectionnez les fichiers préconstruits .so qui correspondent à votre version PHP, à votre architecture, au mode de sécurité des threads et aux bibliothèques natives du système d’exploitation. Vérifiez les exigences Linux et macOS préconfigurées ; utilisez PIE si elles ne correspondent pas à votre environnement.
Par exemple, les fichiers PHP 8.4 non thread-safe portent le nom SQLSRV_8.4_NTS.so et PDO_SQLSRV_8.4_NTS.so. Placez-les dans le répertoire retourné par php -i | grep extension_dir. Renomme-les en sqlsrv.so et pdo_sqlsrv.so pour utiliser les entrées suivantes, ou utilise les noms exacts des fichiers de paquets dans les entrées à la place. Ajoutez les entrées à votre configuration PHP active dans l’ordre de chargement décrit dans cette section :
extension=sqlsrv.so
extension=pdo_sqlsrv.so
Les objets de données PHP (PDO) doivent se charger avant PDO_SQLSRV. PHP lit php.ini avant d'analyser les fichiers .ini supplémentaires par ordre alphabétique. Si votre distribution charge pdo.so à partir d’un fichier analysé, placez l’entrée PDO_SQLSRV dans un fichier analysé ultérieur, comme 30-pdo_sqlsrv.ini lorsque PDO utilise 10-pdo.ini. Dans ce cas, ne placez pas l’entrée PDO_SQLSRV dans php.ini.
Choisissez les entrées de l’extension
Utilisez des entrées qui correspondent à la façon dont les pilotes ont été installés :
| Plateforme et méthode | Entrée SQLSRV | entrée PDO_SQLSRV |
|---|---|---|
| Windows avec PIE | extension=php_sqlsrv.dll |
extension=php_pdo_sqlsrv.dll |
| ZIP publié pour Windows | Nom exact versionné de la DLL, tel que extension=php_sqlsrv_85_ts_x64.dll |
Nom exact de la DLL versionné, tel que extension=php_pdo_sqlsrv_85_ts_x64.dll |
| Linux ou macOS avec PIE | extension=sqlsrv.so |
extension=pdo_sqlsrv.so |
| Archive publiée pour Linux ou macOS, fichiers renommés | extension=sqlsrv.so |
extension=pdo_sqlsrv.so |
| Archive publiée pour Linux ou macOS, fichiers originaux | Nom exact du fichier d’archive, tel que extension=SQLSRV_8.4_NTS.so |
Nom exact de fichier d’archive, comme extension=PDO_SQLSRV_8.4_NTS.so |
Ne configurez pas à la fois un nom court et un nom versionné pour la même extension. PHP peut signaler qu’un module est déjà chargé, ou continuer à charger un fichier plus ancien après une mise à jour.
Redémarrez PHP pour charger les drivers
Redémarrez le processus après avoir modifié un fichier d’extension ou un fichier de configuration. Redémarrez le serveur web, PHP-FPM, les workers de file d’attente et d’autres processus PHP de longue durée qui chargent le pilote.
Les extensions SQLSRV et PDO_SQLSRV peuvent être chargées indépendamment, mais installez et vérifiez les deux lorsque votre application utilise les deux pilotes. PDO est intégré dans de nombreux paquets PHP. Si le PDO n’est pas intégré, activez l’extension PDO avant PDO_SQLSRV.
Vérifiez les pilotes chargés
Pour l’exécution en ligne de commande, exécutez :
php --ri sqlsrv
php --ri pdo_sqlsrv
php -m | findstr /I "sqlsrv pdo_sqlsrv"
Sous Linux ou macOS, utilisez :
php --ri sqlsrv
php --ri pdo_sqlsrv
php -m | grep -E "sqlsrv|pdo_sqlsrv"
Pour un serveur web, restreignez l’accès à une page de diagnostic avant de créer une page temporaire contenant <?php phpinfo(); ?>. Confirmez le fichier de configuration chargé, extension_dir et les sections distinctes sqlsrv et pdo_sqlsrv. Supprimez la page après vérification.
Effectuez également une vérification au niveau PHP afin que la vérification couvre les deux API et pas seulement les noms des modules. Enregistrez ce programme sous verify-php-drivers.php:
<?php
$checks = [
'SQLSRV extension' => extension_loaded('sqlsrv'),
'SQLSRV API' => function_exists('sqlsrv_connect'),
'PDO_SQLSRV extension' => extension_loaded('pdo_sqlsrv'),
'PDO_SQLSRV API' => class_exists('PDO')
&& in_array('sqlsrv', PDO::getAvailableDrivers(), true),
];
$failed = false;
foreach ($checks as $name => $passed) {
echo $name . ': ' . ($passed ? 'loaded' : 'missing') . PHP_EOL;
$failed = $failed || !$passed;
}
exit($failed ? 1 : 0);
Exécutez le programme avec chaque exécutable PHP utilisé par votre application :
php verify-php-drivers.php
Sortie attendue :
SQLSRV extension: loaded
SQLSRV API: loaded
PDO_SQLSRV extension: loaded
PDO_SQLSRV API: loaded
Pour un environnement d’exécution web, placez temporairement le fichier dans la racine documentaire et demandez-la dans un navigateur. Supprimez-le après vérification. Ce programme n’ouvre pas de connexion à la base de données ni n’imprime les valeurs de configuration.
Supprime verify-php-drivers.php après avoir terminé les vérifications de CLI et d’exécution web.
Résoudre le chargement lié aux pilotes
| Symptôme | Cause à vérifier | Mesure corrective |
|---|---|---|
Unable to load dynamic library |
Mauvais nom de fichier, extension_dirmauvaise version mineure PHP, architecture ou mode de sécurité de thread |
Comparez php -i avec le fichier de pilotes sélectionné et utilisez temporairement un chemin absolu pour isoler les erreurs de chemin |
The specified module could not be found dans un environnement Windows |
La DLL du pilote ou l’une de ses dépendances n’est pas disponible | Confirmez que la DLL est dans extension_dir, installez le runtime Visual C++ correspondant, et inspectez toute dépendance DLL manquante |
undefined symbol ou erreur de bibliothèque partagée sous Linux ou macOS |
Incompatibilité entre l’extension et le build PHP, ou dépendance ODBC manquante | Reconstruisez avec l’élément prévu php-config, puis inspectez la bibliothèque manquante signalée |
Module "sqlsrv" is already loaded |
Entrées en double ou deux fichiers numérisés | Recherchez l’élément php.ini chargé et le répertoire d’analyse, puis conservez une entrée |
could not find driver de PDO |
PDO_SQLSRV n’est pas chargé, ou le PDO se charge après lui | Vérifiez php --ri pdo_sqlsrv et déplacez l’entrée PDO_SQLSRV après le PDO |
| La ligne de commande fonctionne mais les requêtes web échouent | Configuration SAPI différente ou processus qui n’a pas été relancé | Comparez les valeurs de CLI et phpinfo() de configuration, modifiez la configuration web, puis redémarrez le processus web |
Les anciens éléments ExtensionVer restent après une mise à niveau |
La configuration fait toujours référence à un fichier de version plus ancienne | Remplacez l’ancienne entrée par le fichier installé par la méthode sélectionnée, supprimez les doublons, et redémarrez tous les processus PHP |
PHP gère la découverte des extensions et l’ordre de chargement. PIE ou une copie manuelle fournissent le fichier d’extension. Le chargeur du système d’exploitation résout les dépendances natives. Le pilote Microsoft ODBC gère le protocole de base de données après le chargement de l’extension.