Nejčastější problémy po změně verze PHP
Co se může pokazit po přechodu na novější verzi PHP, jak chyby poznat a jak postupovat při jejich řešení.
3 minuty čtení 7 kroků
Obsah návodu
Novější verze PHP přináší vyšší rychlost a bezpečnost, ale zároveň odstraňuje zastaralé funkce. Starší web nebo neaktualizovaný plugin se proto po přechodu může přestat načítat. Verzi PHP na hostingu mění technická podpora, postup je popsán v návodu Jak změnit PHP verzi?. Níže najdete nejčastější potíže, které po změně nastávají, a jak je řešit.
Odstraněné funkce
Nejčastější příčinou úplného výpadku webu je volání funkce, která v nové verzi PHP už neexistuje. Web pak skončí chybou Fatal error: Uncaught Error: Call to undefined function. Typické případy:
| Funkce | Odstraněno od | Náhrada |
|---|---|---|
mysql_connect, mysql_query a další mysql_* |
PHP 7.0 | mysqli_* nebo PDO |
ereg, eregi, split |
PHP 7.0 | preg_match, preg_split |
each |
PHP 8.0 | cyklus foreach |
create_function |
PHP 8.0 | anonymní funkce (function () { … }) |
utf8_encode, utf8_decode |
PHP 8.2 označeno jako zastaralé | mb_convert_encoding |
Pokud jde o vlastní kód, je třeba ho upravit. Pokud jde o hotovou aplikaci či plugin, hledejte novější verzi.
Hlášky Deprecated a Warning
Hlášky typu Deprecated: Creation of dynamic property is deprecated nebo Warning: Undefined array key web většinou nezastaví, jen upozorňují, že kód používá zastaralý zápis. Návštěvníkům by se zobrazovat neměly, viz Jak zobrazit chyby PHP a kde najít error_log. Odstraní je aktualizace příslušného pluginu nebo šablony.
Nekompatibilní pluginy a šablony WordPressu
Samotný aktuální WordPress s novým PHP funguje. Problémy způsobují zpravidla starší pluginy a šablony, které autor už neaktualizuje. Jak najít viníka:
- Zapněte log chyb (
WP_DEBUG_LOG) a podívejte se, ve které složce vewp-content/pluginsnebowp-content/themeschyba vzniká. - Pokud se nedostanete do administrace, přejmenujte přes FTP složku problémového pluginu (například na
nazev-pluginu_off). WordPress ho tím deaktivuje. - Plugin aktualizujte, nebo ho nahraďte udržovanou alternativou. U šablony přepněte dočasně na výchozí šablonu WordPressu.
Starší verze aplikací
Starší verze PrestaShopu (1.6 a nižší), Joomly (3.x a nižší) nebo jiných redakčních systémů nejsou s PHP 8 kompatibilní a jejich aktualizace bývá větší zásah. Před změnou verze PHP si ověřte v dokumentaci výrobce, kterou verzi PHP vaše vydání podporuje, a v případě potřeby aplikaci nejdříve aktualizujte.
Doporučený postup při změně verze
- Zálohujte soubory webu (stáhněte složku
webpřes FTP) i databázi (viz Jak exportovat databázi?). - Aktualizujte redakční systém, všechny pluginy a šablonu na nejnovější verze ještě před změnou PHP.
- Požádejte podporu o změnu verze a hned poté projděte celý web: úvodní stránku, administraci, formuláře, košík a další důležité funkce.
- Pokud narazíte na chybu, kterou nedokážete rychle opravit, požádejte podporu na podpora@datahost.cz o dočasný návrat k původní verzi. Získáte tak čas na opravu bez výpadku webu.
Ve WordPressu si můžete kompatibilitu předem ověřit pluginem PHP Compatibility Checker. U vlastního kódu pomůže nástroj PHPCompatibility pro PHP_CodeSniffer.
Nejčastější chyby
- Bílá stránka bez hlášky. Zapněte výpis chyb nebo se podívejte do souboru
error_log. - Chyba se objevuje jen v některé části webu. Obvykle jde o jeden konkrétní plugin nebo modul; hláška uvádí cestu k souboru.
- Web funguje, ale zobrazuje hlášky Deprecated. Vypněte
display_errorsa naplánujte aktualizaci dotčeného kódu.