Načíst ovladače Microsoft Drivers for PHP for SQL Server

SQLSRV a PDO_SQLSRV ovladače jsou PHP rozšíření. PHP je načítá, když se proces PHP spustí, načtením php.ini a všech dalších souborů .ini.

Načtení je oddělené od instalace. Kopírování nebo sestavení rozšíření umisťuje soubor na disk. PHP může používat SQLSRV nebo PDO_SQLSRV teprve poté, co aktivní konfigurace obsahuje správný záznam a proces PHP se restartuje.

Chránit webové diagnostické stránky

Před vytvořením dočasné phpinfo() stránky nakonfigurujte webový server tak, aby povoloval pouze požadavky z localhostu nebo přístup autentizovaným administrátorům. Toto omezení si ponechejte, dokud stránku nesmažete. phpinfo() může zpřístupnit proměnné prostředí, přihlašovací údaje a konfiguraci serveru. Stránku ihned po ověření smažte.

Pochopte rozsah konfigurace PHP

Každé programovací rozhraní PHP serveru (SAPI) může používat jiný spustitelný soubor a konfiguraci:

Runtime Typický zdroj konfigurace Jak ji identifikovat
Rozhraní příkazového řádku (CLI) Adresář php.ini a skenování nahlášené nástrojem php --ini Spusťte php --ini pomocí přesného spustitelného souboru
IIS FastCGI Spustitelný soubor PHP konfigurovaný v aplikaci IIS FastCGI Použijte dočasnou phpinfo() stránku
modul Apache Konfigurace PHP modulu v Apache Použijte dočasnou phpinfo() stránku
PHP-FPM FPM spustitelný soubor, pool, php.ini, a adresář skenování Spusťte verzovaný binární soubor FPM pomocí -i nebo použijte dočasnou stránku phpinfo()
Dlouho běžící worker Spustitelný soubor a prostředí pro spuštění pracovního procesu Zkontrolujte službu pracovníka a po změnách ji restartujte

Změna konfigurace CLI neovlivní IIS, Apache ani PHP-FPM, když použijí jinou instalaci PHP nebo adresář prohledávání PHP.

Najděte konfiguraci PHP

Spusť tyto příkazy pomocí PHP spustitelného souboru používaného vaší aplikací:

php --ini
php -i | findstr /I "PHP Version Thread Safety Architecture extension_dir"

Na Linuxu nebo macOS nahraďte findstr za grep:

php -i | grep -E "PHP Version|Thread Safety|extension_dir"
file "$(php -r 'echo PHP_BINARY;')"

Příkaz file identifikuje architekturu vybraného spustitelného souboru. Pro univerzální spustitelný soubor macOS postupujte podle pokynů pro explicitní výběr architektury.

Načtený konfigurační soubor a Vyhledat další soubory .ini v identifikují konfiguraci používanou procesem příkazového řádku. Webový server nebo PHP FastCGI Process Manager (PHP-FPM) proces může používat jiný PHP spustitelný soubor nebo konfigurační soubor. Použijte dočasnou stránku phpinfo() k identifikaci hodnot daného procesu.

Před úpravou souboru zaznamenejte:

  • Cesta a verze spustitelného souboru PHP.
  • Načtený php.ini.
  • Další .ini adresář skenování.
  • Adresář rozšíření.
  • Režim zabezpečení vláken a architektura.
  • Každý proces, který je třeba restartovat.

Zálohujte každý konfigurační soubor, který změníte.

Načtěte ovladače ve Windows

Pro instalaci pomocí PHP Installer for Extensions (PIE) nejprve stáhněte a ověřte PIE. Spusťte následující příkazy z adresáře obsahujícího pie.phar pomocí spustitelného souboru PHP, který má načíst ovladače:

php .\pie.phar install microsoft/sqlsrv
php .\pie.phar install microsoft/pdo_sqlsrv

PIE instaluje php_sqlsrv.dll a php_pdo_sqlsrv.dll. Pokud PIE nemůže automaticky povolit rozšíření, odstraňte všechny existující SQLSRV a PDO_SQLSRV položky z aktivního php.ini, pak přidejte:

extension=php_sqlsrv.dll
extension=php_pdo_sqlsrv.dll

Používejte pouze jeden záznam pro každého řidiče. Po změně konfigurace restartujte proces PHP.

Pro instalaci ZIP zkopírujte dynamické linkové knihovny (DLL), které odpovídají minorové verzi PHP, architektuře a režimu thread safety, do adresáře extension_dir. Runtime bezpečný pro vlákna v PHP 8.5 x64 používá tato jména souborů:

php_sqlsrv_85_ts_x64.dll
php_pdo_sqlsrv_85_ts_x64.dll

Přidejte oba názvy souborů k php.ini, který používá proces PHP:

extension=php_sqlsrv_85_ts_x64.dll
extension=php_pdo_sqlsrv_85_ts_x64.dll

Nahraďte 85, ts, a x64 hodnotami pro vaše PHP runtime. Nemíchejte vláknově bezpečné a nevláknově bezpečné soubory, 32bitové a 64bitové soubory nebo soubory vytvořené pro jinou vedlejší verzi PHP.

Nainstalujte ovladače v Linuxu a macOS

Nainstalujte ovladače pomocí PIE. Pro více informací si přečtěte instalační tutoriál pro Linux a macOS. PIE instaluje soubory rozšíření a snaží se je povolit pomocí PHP konfiguračních nástrojů platformy nebo přidáním extension= položky do dalšího .ini souboru či standardního php.ini. Pokud PIE hlásí, že se mu nepodařilo povolit rozšíření, přidejte položku sami a ověřte aktivní konfiguraci.

Pro ruční instalaci vyberte předpřipravené .so soubory, které odpovídají vaší verzi PHP, architektuře, režimu bezpečnosti vláken a nativním knihovnám operačního systému. Zkontrolujte předpřipravené požadavky na Linux a macOS; použijte PIE, pokud neodpovídají vašemu prostředí.

Například soubory PHP 8.4, které nejsou bezpečné pro vlákna, jsou pojmenovány SQLSRV_8.4_NTS.so a PDO_SQLSRV_8.4_NTS.so. Umístěte je do adresáře vráceného pomocí php -i | grep extension_dir. Přejmenujte je na sqlsrv.so a pdo_sqlsrv.so, aby bylo možné použít následující položky, nebo místo toho použijte v záznamech přesné názvy souborů balíčků. Přidejte položky do své aktivní PHP konfigurace v pořadí načítání popsaném v této sekci:

extension=sqlsrv.so
extension=pdo_sqlsrv.so

PHP Data Objects (PDO) se musí načíst před PDO_SQLSRV. PHP čte php.ini před skenováním dalších .ini souborů v abecedním pořadí. Pokud vaše distribuce načítá pdo.so ze skenovaného souboru, vložte položku PDO_SQLSRV do později naskenovaného souboru, například 30-pdo_sqlsrv.ini, když PDO používá 10-pdo.ini. V tom případě nedávejte záznam PDO_SQLSRV do php.ini.

Vyberte položky rozšíření

Použijte záznamy, které odpovídají tomu, jak byly ovladače nainstalovány:

Platforma a metoda Záznam SQLSRV PDO_SQLSRV položka
Windows s technologií PIE extension=php_sqlsrv.dll extension=php_pdo_sqlsrv.dll
Systém Windows uvolnil soubor ZIP Přesný název DLL s uvedenou verzí, například extension=php_sqlsrv_85_ts_x64.dll Přesný název DLL s uvedenou verzí, například extension=php_pdo_sqlsrv_85_ts_x64.dll
Linux nebo macOS s PIE extension=sqlsrv.so extension=pdo_sqlsrv.so
Archiv vydaný pro Linux nebo macOS, přejmenované soubory extension=sqlsrv.so extension=pdo_sqlsrv.so
Archiv pro Linux nebo macOS, původní soubory Přesný název archivního souboru, například extension=SQLSRV_8.4_NTS.so Přesný název archivního souboru, například extension=PDO_SQLSRV_8.4_NTS.so

Nenastavujte zároveň krátké jméno i název s verzí pro stejné rozšíření. PHP může hlásit, že modul je již načtený, nebo může pokračovat v načítání staršího souboru po upgradu.

Restartujte PHP pro načtení ovladačů

Proces restartujte po změně souboru rozšíření nebo konfiguračního souboru. Restartujte webový server, PHP-FPM, worker procesy fronty a další dlouho běžící PHP procesy, které načítají driver.

Rozšíření SQLSRV a PDO_SQLSRV lze načíst nezávisle, ale nainstalujte a ověřte obě rozšíření, když vaše aplikace používá oba ovladače. PDO je součástí mnoha PHP balíčků. Pokud PDO není vestavěné, povolte rozšíření PDO před PDO_SQLSRV.

Ověřte načtené ovladače

Pro runtime příkazového řádku spusťte:

php --ri sqlsrv
php --ri pdo_sqlsrv
php -m | findstr /I "sqlsrv pdo_sqlsrv"

Na Linuxu nebo macOS použijte:

php --ri sqlsrv
php --ri pdo_sqlsrv
php -m | grep -E "sqlsrv|pdo_sqlsrv"

Pro webový server omezte přístup k diagnostické stránce před vytvořením dočasné stránky obsahující <?php phpinfo(); ?>. Potvrďte načtený konfigurační soubor, extension_dir a samostatné sekce sqlsrv a pdo_sqlsrv. Po ověření stránku odstraňte.

Také spusť kontrolu na úrovni PHP, aby ověřování pokrývalo obě API, ne jen názvy modulů. Uložte tento program jako 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);

Spusť program s každým spustitelným souborem PHP, který tvoje aplikace používá:

php verify-php-drivers.php

Očekávaný výstup:

SQLSRV extension: loaded
SQLSRV API: loaded
PDO_SQLSRV extension: loaded
PDO_SQLSRV API: loaded

Pro webový runtime umístěte soubor dočasně do kořene dokumentu a otevřete jej v prohlížeči. Po ověření ho odstraňte. Tento program neotevírá připojení k databázi ani nevypisuje konfigurační hodnoty.

Po dokončení kontrol CLI a web-runtime smažte verify-php-drivers.php.

Řešení problémů s načítáním ovladačů

Symptom Způsobit kontrolu Nápravná akce
Unable to load dynamic library Špatný název souboru, extension_dir, vedlejší verze PHP, architektura nebo režim thread safety Porovnejte php -i s vybraným souborem ovladače a použijte absolutní cestu dočasně k izolaci chyb cesty
The specified module could not be found ve Windows Ovladač DLL ani některá z jeho závislostí není dostupná Potvrďte, že DLL je v extension_dir, nainstalujte odpovídající runtime Visual C++ a zkontrolujte případnou zbývající chybějící závislost DLL
undefined symbol nebo chyba sdílené knihovny na Linuxu či macOS Nesoulad mezi rozšířením a PHP buildem, nebo chybějící závislost na ODBC Přestavte se zamýšleným php-config, poté zkontrolujte hlášenou chybějící knihovnu
Module "sqlsrv" is already loaded Duplicitní záznamy nebo dva naskenované soubory Prohledejte načtený php.ini a adresář pro skenování, pak si ponechte jeden záznam
could not find driver z PDO PDO_SQLSRV není načten, nebo se po něm načítá PDO Zkontrolujte php --ri pdo_sqlsrv a přesuňte záznam PDO_SQLSRV za PDO
CLI funguje, ale webové požadavky selhávají Jiná konfigurace SAPI nebo proces, který nebyl restartován Porovnejte hodnoty CLI a phpinfo() konfigurace, upravte webovou konfiguraci a restartujte webový proces
Po aktualizaci zůstává staré ExtensionVer Konfigurace stále pojmenovává soubor s verzí v názvu Nahraďte starý záznam souborem nainstalovaným vybranou metodou, odstraňte duplicity a restartujte všechny PHP procesy

PHP řídí vyhledávání rozšíření a pořadí načítání. PIE nebo ruční zkopírování dodá soubor rozšíření. Zavaděč operačního systému řeší nativní závislosti. Ovladač Microsoft ODBC přebírá databázový protokol po načtení rozšíření.