Ladda Microsoft-drivrutinerna för PHP för SQL Server

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 .ini skanningskatalog.
  • 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.