Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
SQLSRV- och PDO_SQLSRV-drivrutinerna är PHP-tillägg. PHP laddar dem när PHP-processen startar genom att läsa php.ini och eventuellt ytterligare .ini filer.
Inläsning är separat från installation. Att kopiera eller bygga tillägget placerar en fil på disken. PHP kan inte använda SQLSRV eller PDO_SQLSRV förrän den aktiva konfigurationen innehåller rätt post och PHP-processen startar om.
Skydda webbdiagnostiska sidor
Innan du skapar en tillfällig phpinfo() sida, konfigurera webbservern så att den endast tillåter localhost-förfrågningar eller autentiserade administratörer. Behåll den begränsningen tills du raderar sidan.
phpinfo() kan exponera miljövariabler, inloggningsuppgifter och serverkonfiguration. Ta bort sidan omedelbart efter verifiering.
Förstå PHP:s konfigurationsomfattning
Applikationsprogrammeringsgränssnittet (SAPI) för varje PHP-server kan använda en annan exekverbar fil och konfiguration:
| Runtime | Typisk konfigurationskälla | Hur man identifierar den |
|---|---|---|
| Kommandoradsgränssnittet (CLI) | Scan-katalogen php.ini som rapporterats av php --ini |
Kör php --ini med exakt samma körbara fil |
| IIS FastCGI | Den PHP-körbara filen som är konfigurerad i IIS FastCGI-applikationen | Använd en tillfällig phpinfo() sida |
| Apache-modul | Konfiguration av Apaches PHP-modul | Använd en tillfällig phpinfo() sida |
| PHP-FPM | den körbara FPM-filen, pool, php.ini, och scan-katalogen |
Kör den versionerade FPM-binärfilen med -i eller använd en tillfällig phpinfo() sida |
| Långkörande worker | Den körbara filen och miljön som startade arbetaren | Inspektera worker-tjänsten och starta om den efter ändringarna |
Att ändra CLI-konfigurationen påverkar inte IIS, Apache eller PHP-FPM när de använder en annan PHP-installation eller skanningskatalog.
Hitta PHP-konfigurationen
Kör dessa kommandon med den PHP-körbara fil som används av din applikation:
php --ini
php -i | findstr /I "PHP Version Thread Safety Architecture extension_dir"
På Linux eller macOS, ersätt findstr med grep:
php -i | grep -E "PHP Version|Thread Safety|extension_dir"
file "$(php -r 'echo PHP_BINARY;')"
Kommandot file identifierar den valda exekverbara filens arkitektur. För en universell macOS-exekverbar fil, följ explicit arkitekturval.
Den laddade konfigurationsfilen och Sök efter ytterligare .ini-filer i-värdena identifierar konfigurationen som används av kommandoradsprocessen. En webbserver eller PHP FastCGI Process Manager (PHP-FPM)-process kan använda en annan PHP-exekverbar fil eller konfigurationsfil. Använd en tillfällig phpinfo() sida för att identifiera processens värden.
Innan du redigerar en fil, anteckna:
- PHP:s körbara sökväg och version.
- Den inlästa filen
php.ini. - Ytterligare
.iniskanningskatalog. - Tilläggskatalogen.
- Trådsäkerhetsläget och arkitekturen.
- Varje process som du måste starta om.
Säkerhetskopiera varje konfigurationsfil du ändrar.
Ladda drivrutinerna i Windows
För en installation med PHP Installer för Extensions (PIE), ladda först ner och verifiera PIE. Kör följande kommandon från katalogen som innehåller pie.phar, med den körbara PHP-filen som ska ladda drivrutinerna:
php .\pie.phar install microsoft/sqlsrv
php .\pie.phar install microsoft/pdo_sqlsrv
PIE installerar php_sqlsrv.dll och php_pdo_sqlsrv.dll. Om PIE inte kan aktivera tilläggen automatiskt, ta bort befintliga SQLSRV- och PDO_SQLSRV-poster från den aktiva php.ini, lägg sedan till:
extension=php_sqlsrv.dll
extension=php_pdo_sqlsrv.dll
Använd bara en registrering för varje drivrutin. Starta om PHP-processen efter att ha ändrat dess konfiguration.
För en ZIP-installation, kopiera de dynamiska länkbiblioteken (DLL) som matchar PHP-minorversionen, arkitekturen och trådsäkerhetsläget till katalogen extension_dir . En PHP 8.5 x64 trådsäker runtime använder dessa filnamn:
php_sqlsrv_85_ts_x64.dll
php_pdo_sqlsrv_85_ts_x64.dll
Lägg till båda filnamnen till det php.ini som används av PHP-processen:
extension=php_sqlsrv_85_ts_x64.dll
extension=php_pdo_sqlsrv_85_ts_x64.dll
Ersätt 85, ts, och x64 med värdena för din PHP-runtime. Blanda inte trådsäkra och icke-trådsäkra filer, 32-bitars och 64-bitarsfiler, eller filer som är byggda för en annan PHP-minorversion.
Ladda drivrutinerna på Linux och macOS
Installera drivrutinerna med hjälp av PIE. För mer information, se installationsguiden för Linux och macOS. PIE installerar tilläggsfilerna och försöker aktivera dem genom att använda plattformens PHP-konfigurationsverktyg eller genom att lägga till en extension= post i en extra .ini fil eller standardfilen php.ini. Om PIE rapporterar att den inte kunde aktivera en tillägg, lägg till posten själv och verifiera den aktiva konfigurationen.
För en manuell installation, välj de förkompilerade .so filer som matchar din PHP-version, arkitektur, trådsäkerhetsläge och operativsystemets inbyggda bibliotek. Kontrollera de förbyggda Linux- och macOS-kraven; använd PIE om de inte matchar din miljö.
Till exempel är PHP 8.4 icke-trådsäkra filer namngivna SQLSRV_8.4_NTS.so och PDO_SQLSRV_8.4_NTS.so. Placera dem i katalogen som returneras av php -i | grep extension_dir. Byt namn på dem till sqlsrv.so och pdo_sqlsrv.so för att använda följande poster, eller använd exakta paketfilnamn i posterna istället. Lägg till posterna i din aktiva PHP-konfiguration i den ordning som beskrivs i detta avsnitt:
extension=sqlsrv.so
extension=pdo_sqlsrv.so
PHP Data Objects (PDO) måste laddas innan PDO_SQLSRV. PHP läser php.ini innan ytterligare .ini-filer skannas i alfabetisk ordning. Om din distribution läser in pdo.so från en skannad fil, placera PDO_SQLSRV-posten i en senare skannad fil, till exempel 30-pdo_sqlsrv.ini när PDO använder 10-pdo.ini. Placera inte posten PDO_SQLSRV i php.ini i så fall.
Välj tilläggsposterna
Använd poster som matchar hur drivrutinerna installerades:
| Plattform och metod | SQLSRV-postering | PDO_SQLSRV post |
|---|---|---|
| Windows med PIE | extension=php_sqlsrv.dll |
extension=php_pdo_sqlsrv.dll |
| ZIP som släppts för Windows | Exakt versionerat DLL-namn, såsom extension=php_sqlsrv_85_ts_x64.dll |
Exakt versionerat DLL-namn, såsom extension=php_pdo_sqlsrv_85_ts_x64.dll |
| Linux eller macOS med PIE | extension=sqlsrv.so |
extension=pdo_sqlsrv.so |
| Linux- eller macOS-släppt arkiv, omdöpta filer | extension=sqlsrv.so |
extension=pdo_sqlsrv.so |
| arkiv för Linux eller macOS, originalfiler | Exakt arkivfilnamn, såsom extension=SQLSRV_8.4_NTS.so |
Exakt arkivfilnamn, såsom extension=PDO_SQLSRV_8.4_NTS.so |
Konfigurera inte både ett kort namn och ett versionsbaserat namn för samma tillägg. PHP kan rapportera att en modul redan är laddad, eller så kan den fortsätta ladda en äldre fil efter en uppgradering.
Starta om PHP för att ladda drivrutinerna
Starta om processen efter att ha ändrat en tilläggsfil eller konfigurationsfil. Starta om webbservern, PHP-FPM, köprocesser och andra långvariga PHP-processer som laddar drivrutinen.
SQLSRV- och PDO_SQLSRV-tilläggen kan laddas oberoende av varandra, men installera och verifiera båda när din applikation använder båda drivrutinerna. PDO är inbyggd i många PHP-paket. Om PDO inte är inbyggt, aktivera PDO-tillägget innan PDO_SQLSRV.
Kontrollera de laddade drivrutinerna
För kommandoradskörningen, kör:
php --ri sqlsrv
php --ri pdo_sqlsrv
php -m | findstr /I "sqlsrv pdo_sqlsrv"
På Linux eller macOS, använd:
php --ri sqlsrv
php --ri pdo_sqlsrv
php -m | grep -E "sqlsrv|pdo_sqlsrv"
För en webbserver, begränsa åtkomsten till diagnostiska sidor innan du skapar en tillfällig sida som innehåller <?php phpinfo(); ?>. Bekräfta den laddade konfigurationsfilen, extension_dir och de separata avsnitten sqlsrv och pdo_sqlsrv. Ta bort sidan efter verifiering.
Kör också en PHP-nivå kontroll så att verifieringen täcker båda API:erna istället för bara modulnamn. Spara detta program som 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);
Kör programmet med varje PHP-exekverbar fil som din applikation använder:
php verify-php-drivers.php
Förväntat resultat:
SQLSRV extension: loaded
SQLSRV API: loaded
PDO_SQLSRV extension: loaded
PDO_SQLSRV API: loaded
För en webbruntime, placera filen tillfälligt i dokumentets rot och öppna den i en webbläsare. Ta bort den efter verifiering. Detta program öppnar inte en databasanslutning eller skriver ut konfigurationsvärden.
Ta bort verify-php-drivers.php efter att du har slutfört CLI- och webbruntime-kontrollerna.
Felsök drivrutinsladdning
| Symtom | Orsak att kontrollera | Korrigeringsåtgärder |
|---|---|---|
Unable to load dynamic library |
Fel filnamn, extension_dir, PHP-minorversion, arkitektur eller trådsäkerhetsläge |
Jämför php -i med den valda drivrutinsfilen och använd en absolut sökväg tillfälligt för att isolera sökvägsfel |
The specified module could not be found på Windows |
Drivrutins-DLL eller någon av dess beroenden är inte tillgänglig | Bekräfta att DLL-filen finns i extension_dir, installera matchande Visual C++-runtime och inspektera eventuella kvarvarande saknade DLL-beroenden |
undefined symbol eller fel i delat bibliotek på Linux eller macOS |
Inkompatibilitet mellan tillägg och PHP-bygge, eller saknat ODBC-beroende | Bygg om med det avsedda php-configbiblioteket , och inspektera sedan det rapporterade saknade biblioteket |
Module "sqlsrv" is already loaded |
Dubblettposter eller två skannade filer | Sök i den laddade php.ini och skanna katalogen, och behåll sedan ett objekt |
could not find driver från PDO |
PDO_SQLSRV laddas inte, eller PDO laddas efter den | Kontrollera php --ri pdo_sqlsrv och flytta den PDO_SQLSRV posten efter PDO |
| CLI fungerar men webbförfrågningar misslyckas | Annan SAPI-konfiguration eller en process som inte har startats om | Jämför CLI och phpinfo() konfigurationsvärden, redigera webbkonfigurationen och starta om webbprocessen |
Gamla ExtensionVer finns kvar efter en uppgradering |
Konfigurationen namnger fortfarande en äldre versionerad fil | Byt ut den gamla posten mot filen som installerats med den valda metoden, ta bort dubbletter och starta om alla PHP-processer |
PHP hanterar upptäckt av tillägg och laddningsordning. PIE eller en manuell kopia tillhandahåller tilläggsfilen. Operativsystemets laddare löser interna beroenden. Microsoft ODBC-drivrutinen hanterar databasprotokollet efter att tillägget laddats.