Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De SQLSRV- en PDO_SQLSRV-drivers zijn PHP-extensies. PHP laadt ze wanneer het PHP-proces begint door het lezen php.ini en eventuele extra .ini bestanden.
Het laden is gescheiden van de installatie. Het kopiëren of bouwen van de extensie plaatst een bestand op de schijf. PHP kan SQLSRV of PDO_SQLSRV niet gebruiken totdat de actieve configuratie de juiste invoer bevat en het PHP-proces opnieuw wordt opgestart.
Bescherm webdiagnostische pagina's
Voordat je een tijdelijke phpinfo() pagina aanmaakt, configureer je de webserver zodat alleen localhost-verzoeken of geauthenticeerde beheerders worden toegestaan. Houd die beperking aan totdat je de pagina verwijdert.
phpinfo() kan omgevingsvariabelen, inloggegevens en serverconfiguratie blootstellen. Verwijder de pagina direct na verificatie.
Begrijp de PHP-configuratiescope
Elke PHP-server application programming interface (SAPI) kan een ander uitvoerbaar bestand en configuratie gebruiken:
| Runtime | Standaardconfiguratiebron | Hoe je het identificeert |
|---|---|---|
| Opdrachtregelinterface (Command-line Interface, CLI) | De php.ini en scandirectory gerapporteerd door php --ini |
Voer php --ini uit met het exacte uitvoerbare bestand |
| IIS FastCGI | Het in de IIS FastCGI-applicatie geconfigureerde PHP-uitvoerbare bestand | Gebruik een tijdelijke phpinfo() pagina |
| Apache-module | Apache's PHP-moduleconfiguratie | Gebruik een tijdelijke phpinfo() pagina |
| PHP-FPM | Het FPM-uitvoerbare bestand, pool, php.ini, en scandirectory |
Voer de geversioneerde FPM-binary uit met -i of gebruik een tijdelijke phpinfo() pagina |
| Langdurige worker | Het uitvoerbare bestand en de omgeving die de worker hebben gestart | Controleer de worker service en start hem opnieuw na de wijzigingen. |
Het wijzigen van de CLI-configuratie verandert IIS, Apache of PHP-FPM niet wanneer ze een andere PHP-installatie of scandirectory gebruiken.
Zoek de PHP-configuratie
Voer deze commando's uit met het PHP-uitvoerbare bestand dat door je applicatie wordt gebruikt:
php --ini
php -i | findstr /I "PHP Version Thread Safety Architecture extension_dir"
Op Linux of macOS, vervang findstr door grep:
php -i | grep -E "PHP Version|Thread Safety|extension_dir"
file "$(php -r 'echo PHP_BINARY;')"
Het file commando identificeert de architectuur van het geselecteerde uitvoerbare bestand. Volg voor een universeel uitvoerbaar macOS-bestand de instructies voor expliciete architectuurselectie.
De waarden van Loaded Configuration File en Scan for additional .ini files in geven de configuratie aan die door het commandoregelproces wordt gebruikt. Een webserver of PHP FastCGI Process Manager (PHP-FPM) proces kan een ander PHP-uitvoerbaar bestand of configuratiebestand gebruiken. Gebruik een tijdelijke phpinfo() pagina om de waarden van dat proces te identificeren.
Voordat je een bestand bewerkt, noteer je:
- Het pad naar het PHP-uitvoerbare bestand en de versie.
- Het geladen
php.ini. - De extra
.iniscanmap. - De extensiemap.
- De thread-safety-modus en architectuur.
- Elk proces dat je opnieuw moet starten.
Maak een back-up van elk configuratiebestand dat je verandert.
Drivers laden in Windows
Voor een installatie met de PHP Installer for Extensions (PIE), download en verifieer je eerst PIE. Voer de volgende commando's uit vanuit de map die pie.phar bevat, met het uitvoerbare bestand PHP dat de drivers zou moeten laden:
php .\pie.phar install microsoft/sqlsrv
php .\pie.phar install microsoft/pdo_sqlsrv
PIE installeert php_sqlsrv.dll en php_pdo_sqlsrv.dll. Als PIE de extensies niet automatisch kan inschakelen, verwijder dan bestaande SQLSRV- en PDO_SQLSRV-vermeldingen uit de actieve php.ini, voeg dan het volgende toe:
extension=php_sqlsrv.dll
extension=php_pdo_sqlsrv.dll
Gebruik slechts één vermelding per stuurprogramma. Start het PHP-proces opnieuw nadat je de configuratie hebt gewijzigd.
Voor een ZIP-installatie kopieer je de dynamic-link libraries (DLL's) die overeenkomen met de PHP minor versie, architectuur en thread-safety-modus naar de extension_dir directory. Een PHP 8.5 x64 thread-safe runtime gebruikt deze bestandsnamen:
php_sqlsrv_85_ts_x64.dll
php_pdo_sqlsrv_85_ts_x64.dll
Voeg beide bestandsnamen toe aan de php.ini die door het PHP-proces wordt gebruikt:
extension=php_sqlsrv_85_ts_x64.dll
extension=php_pdo_sqlsrv_85_ts_x64.dll
Vervang 85, ts, en x64 door de waarden voor je PHP-runtime. Meng geen thread-veilige en niet-threadveilige bestanden, 32-bit en 64-bit bestanden, of bestanden die voor een andere PHP-minor versie zijn gemaakt.
Laad de drivers op Linux en macOS
Installeer de drivers met PIE. Voor meer informatie, zie de Linux- en macOS-installatietutorial. PIE installeert de extensiebestanden en probeert deze in te schakelen met behulp van de PHP-configuratietools van het platform of door een extension= entry toe te voegen aan een extra .ini bestand of de standaard php.ini. Als PIE meldt dat het geen extensie kon inschakelen, voeg dan zelf de invoer toe en verifieer de actieve configuratie.
Voor een handmatige installatie selecteer je de vooraf gebouwde .so bestanden die passen bij je PHP-versie, architectuur, thread-safety-modus en de native bibliotheken van het besturingssysteem. Controleer de vooraf gebouwde Linux- en macOS-vereisten; gebruik PIE als ze niet overeenkomen met je omgeving.
Bijvoorbeeld heten PHP 8.4 niet-thread-safe-bestanden SQLSRV_8.4_NTS.so en PDO_SQLSRV_8.4_NTS.so. Plaats ze in de map die door php -i | grep extension_dir wordt geretourneerd. Hernoem ze naar sqlsrv.so en pdo_sqlsrv.so om de volgende items te gebruiken, of gebruik in plaats daarvan exact de pakketbestandsnamen in de items. Voeg de vermeldingen toe aan je actieve PHP-configuratie in de load order die in deze sectie wordt beschreven:
extension=sqlsrv.so
extension=pdo_sqlsrv.so
PHP Data Objects (PDO) moet worden geladen voordat PDO_SQLSRV. PHP leest php.ini voordat er extra .ini bestanden in alfabetische volgorde worden gescand. Als je distributie pdo.so laadt vanuit een gescand bestand, plaats dan de PDO_SQLSRV-invoer in een later gescand bestand, bijvoorbeeld 30-pdo_sqlsrv.ini wanneer PDO 10-pdo.ini gebruikt. Plaats in dat geval de PDO_SQLSRV vermelding php.ini niet.
Kies de extensie-items
Gebruik vermeldingen die overeenkomen met hoe de drivers zijn geïnstalleerd:
| Platform en methode | SQLSRV-invoer | PDO_SQLSRV item |
|---|---|---|
| Windows met PIE | extension=php_sqlsrv.dll |
extension=php_pdo_sqlsrv.dll |
| Door Windows vrijgegeven ZIP | Exacte DLL-naam met versienummer, zoals extension=php_sqlsrv_85_ts_x64.dll |
Exacte DLL-naam met versienummer, zoals extension=php_pdo_sqlsrv_85_ts_x64.dll |
| Linux of macOS met PIE | extension=sqlsrv.so |
extension=pdo_sqlsrv.so |
| Archief voor Linux of macOS, bestanden hernoemd | extension=sqlsrv.so |
extension=pdo_sqlsrv.so |
| Vrijgegeven archief voor Linux of macOS, originele bestanden | Exact archiefbestandsnaam, zoals extension=SQLSRV_8.4_NTS.so |
Exact archiefbestandsnaam, zoals extension=PDO_SQLSRV_8.4_NTS.so |
Configureer niet zowel een korte naam als een naam met versienummer voor dezelfde extensie. PHP kan rapporteren dat een module al geladen is, of het kan een ouder bestand na een upgrade blijven laden.
Herstart PHP om de drivers te laden
Herstart het proces na het wijzigen van een extensiebestand of configuratiebestand. Herstart de webserver, PHP-FPM, wachtrijwerkers en andere langlopende PHP-processen die de driver laden.
De SQLSRV- en PDO_SQLSRV-extensies kunnen onafhankelijk geladen worden, maar installeer en verifieer beide wanneer je applicatie beide drivers gebruikt. PDO is ingebouwd in veel PHP-pakketten. Als de PDO niet ingebouwd is, schakel dan de PDO-extensie in vóór PDO_SQLSRV.
Controleer de geladen drivers
Voor de commandoregelruntime, voer uit:
php --ri sqlsrv
php --ri pdo_sqlsrv
php -m | findstr /I "sqlsrv pdo_sqlsrv"
Op Linux of macOS, gebruik:
php --ri sqlsrv
php --ri pdo_sqlsrv
php -m | grep -E "sqlsrv|pdo_sqlsrv"
Beperk voor een webserver de toegang tot diagnostische pagina's voordat u een tijdelijke pagina aanmaakt met <?php phpinfo(); ?>. Bevestig het geladen configuratiebestand, extension_dir en afzonderlijke sqlsrv- en pdo_sqlsrv-secties. Verwijder de pagina na verificatie.
Doe ook een PHP-niveau controle zodat verificatie beide API's omvat en niet alleen modulenamen. Sla dit programma op als 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);
Voer het programma uit met elk PHP-uitvoerbaar bestand dat je applicatie gebruikt:
php verify-php-drivers.php
Verwachte uitvoer:
SQLSRV extension: loaded
SQLSRV API: loaded
PDO_SQLSRV extension: loaded
PDO_SQLSRV API: loaded
Voor een webruntime plaats je het bestand tijdelijk in de documentroot en vraag je het op in een browser. Verwijder het na verificatie. Dit programma opent geen databaseverbinding en print geen configuratiewaarden.
Verwijder verify-php-drivers.php nadat je de CLI- en webruntime-controles hebt afgerond.
Problemen met het laden van stuurprogramma's oplossen
| Symptom | Oorzaak om te controleren | Corrigerende actie |
|---|---|---|
Unable to load dynamic library |
Verkeerde bestandsnaam, extension_dir, PHP minor versie, architectuur of thread-safety-modus |
Vergelijk php -i met het geselecteerde driverbestand en gebruik tijdelijk een absoluut pad om padfouten te isoleren |
The specified module could not be found op Windows |
De driver-DLL of een van zijn afhankelijkheden is niet beschikbaar | Controleer dat de DLL in extension_dir zit, installeer de bijbehorende Visual C++ runtime en controleer eventuele overige ontbrekende DLL-afhankelijkheden |
undefined symbol of shared-library-fout op Linux of macOS |
Extensie- en PHP-build-mismatch, of ontbrekende ODBC-afhankelijkheid | Herbouw met de bedoelde php-config, en inspecteer vervolgens de gemelde ontbrekende bibliotheek |
Module "sqlsrv" is already loaded |
Dubbele vermeldingen of twee gescande bestanden | Zoek in de geladen php.ini en scanmap, en behoud dan één item |
could not find driver van PDO |
PDO_SQLSRV wordt niet geladen, of PDO pas daarna wordt geladen | Controleer php --ri pdo_sqlsrv en verplaats de PDO_SQLSRV invoer na PDO |
| CLI werkt, maar webverzoeken mislukken | Andere SAPI-configuratie of een proces dat niet opnieuw is gestart | Vergelijk CLI en phpinfo() configuratiewaarden, bewerk de webconfiguratie en herstart het webproces |
Oude ExtensionVer blijft na een upgrade staan |
De configuratie verwijst nog steeds naar een ouder versiebestand | Vervang de oude vermelding door het bestand dat door de geselecteerde methode is geïnstalleerd, verwijder duplicaten en start alle PHP-processen opnieuw |
PHP beheert extensie-ontdekking en laadvolgorde. PIE of een handmatig gekopieerd bestand levert het extensiebestand. De besturingssysteemloader lost native afhankelijkheden op. De Microsoft ODBC-driver beheert het databaseprotocol nadat de extensie is geladen.