Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ší
.iniadresář 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í.