Stane se to na každém webu – někdy je mimo provoz. I když WordPress po instalaci nastavíte správně, během provozu může dojít k chybám. Jsou to situace, kterou je nutné řešit co nejdříve, protože přicházíme o návštěvníky, dobré jméno a také Google nefunkční web samozřejmě nezařadí do výsledků vyhledávání. Právě Google nám ale může při odstraňování chyb hodně pomoct.
Jak se zachovat, když se setkáte s chybou
V první řadě – nepanikařte. Příčinu chyby můžete odstranit promyšleným postupem, emoce by měly jít stranou. Někdy můžete chybu odstranit silou, ale příčina může zůstat nevyřešená. To je příklad chyby vzhledu, která je projevem úspěšného napadení vašeho webu nějakým útočníkem.
Velmi často nemáte sami možnost příčinu či zdroj chyby nalézt, proto využijte všech prostředků, které máte k dispozici. Není jich málo.
Pokud web funguje a chyba je srozumitelná (viditelná) i návštěvníkům, pak web přepněte do servisního režimu. O tom jsme psali v článku Jak skrýt web před zraky návštěvníků.
První pomoc: prohlížeč
Nepodceňujte prohlížeče, mám na mysli hlavně Chrome a Firefox. Představují výkonné multifunkční nástroje, v nichž je prohlížení stránek jednou z mnoha funkcí. Mezi ty další funkce patří analýza a testování kódu, jeho ladění a zjišťování informací o síťovém provozu. Stiskněte klávesu F12 a pak Esc. Zobrazí se vám konzole, kde uvidíte chybové hlášky. Také použijte Ctrl-u, což vám zobrazí zdrojový kód stránky. V něm můžete vidět dvě věci:
- Firefox zobrazuje červeně ty části kódu, které obsahují syntaktickou chybu, tj. nelze je správně zpracovat
- najděte konec dokumentu a zjistěte, jestli končí značkou </body></html> – pokud ne, dokument se nenačetl celý
Také zjistěte, jestli se chyba projevuje jen po zadání konkrétní adresy, nebo k ní dochází po zadání jakékoliv adresy.
Zapněte ladění a výpis chyb
Připojte se na FTP a do souboru wp-config.php přidejte do střední části (před výzvu /* That's all, stop editing! Happy blogging. */) následující řádky:
define( 'WP_DEBUG', true); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false ); define( 'SCRIPT_DEBUG', true ); define( 'SAVEQUERIES', true );
Znovu si jednou dvakrát načtěte web, aby se chyby vygenerovaly a uložily do souboru, který najdete na FTP v adresáři wp-content. Soubor se jmenuje debug.log a budou v něm chybové výpisy. Zajímají vás ty, které obsahují slova „fatal“. Chybové hlášky předhoďte vyhledávači Google a brzy byste se měli dopátrat příčiny a často i řešení.
Pokud soubor nevznikne, pak je možné, že existuje jinde. Některé hostingy ho umisťují do jiných adresářů, může se i jinak jmenovat, např. php_error.log.
Pro jistotu: Antivirový test
Pokud je web funkční a lze jej analyzovat, pusťte na něj antivirový test, např. ten od Sucuri. Pamatujte ale na to, že se testuje jedna vybraná stránka webu, nikoliv celý web. Takže vyberte tu, na které se projevuje chyba nebo je nějakým podezřelá. Pokud se stane, že testovací aplikace místo či typ napadení nenajde, ale vy vidíte, že něco není v pořádku, výsledku testování nevěřte a zkuste stránku otestovat jiným nástrojem.
Do budoucna: Search Console
Tento nástroj od Googlu vám nepomůže v okamžiku, kdy chyba nastane, ale pomůže vám odladit chyby zpětně. Důležité je Search Console (dříve Webmasters‘ Tools) aktivovat. Pak vás bude pravidelně informovat o dění na webu a na problémy vás rychle upozorní. Článek o napojení vašeho webu do Console připravujeme.
Typy chyb, jejich možné příčiny a odstraňování
Když narazíte někde na svém webu na chybu, buď na konkrétní stránce nebo v konkrétní situaci i napříč stránkami, je dobré pochopit celý kontext a nereagovat „na první signální“, tedy nejsnazší řešení. Věci bývají komplikovanější. Přečtěte si na Wikipedii článek o stavech a chybách http protokolu, tedy odpovědích webového serveru, když po něm vyžadujete zobrazení stránky.
Stránka nenalezena, 404
Jednoduchá chyba, kterou lze snadno opravit. Má ale více příčin a následných scénářů. Projdeme si ty typické.
Stránka existovala, někdo ji smazal, ale vedou na ni odkazy. Řešením je stránku obnovit, klidně s jiným obsahem než původně. To je snadné. Nezabývejte se emocemi typu „ale já tuhle stránku nechci, máme teď jinou místo ní“. Obnovená stránka může sloužit jako přesměrování na vaši novou… všechno je lepší než chyba, o které víte a z nějakého důvodu ji nechcete opravit.
Existuje typ spamu, který se projevuje v Google Search Console (SC). Různé cizokrajné weby odkazují na neexistující stránky na vašem webu, který se samozřejmě brání chybou 404, což je možné sledovat právě v SC. Nebudete tedy samozřejmě vytvářet nesmyslné stránky, které na vašem webu nikdy nebyly. Je to určitý typ útoku, jeho smyslem je donutit vás, abyste na základě informací ze SC navštívili ty cizokrajné weby. Tam na vás může čekat malware nebo jiné nepříjemné překvapení. Odkazů, které na vás „neoprávněně vedou“ se zbavit nemůžete, ale můžete se od nich v SC distancovat pomocí funkce disavow. Téma na jiný článek.
Přestaly fungovat hezké adresy WordPressu, všechny stránky zmizely a místo nich je chyba 404. Tady je první řešení po ruce – zobrazte si v administraci stránku Nastavení > Nastavení trvalých odkazů. V okamžiku, kdy stránku zobrazíte, se v útrobách WordPressu resetuje nastavení hezkých adres (tedy oněch trvalých odkazů) a vše by mělo začít fungovat. Ani nemusíte nastavení znovu ukládat (na škodu to ale asi nebude).
Tento postup ale nefunguje v případě, kdy máte na webu plugin jako např. iThemes Security, který masivně zasahuje do souboru .htaccess a má pod kontrolou generování adres. Spousta věcí probíhá dynamicky a nejsou v .htaccess vůbec uloženy, takže je neovlivníte. Pravděpodobně pomůže vypnout funkce, které souvisí s ochranou proti útokům vedeným přes adresy. Zde neumím poradit obecně, záleží na nastavení každého webu.
Přístup odepřen, 403
Obvykle se jedná o nedostatečné nastavení uživatelských práv na soubor či adresář na FTP. Toto nezměníte ve WordPressu. Musíte se přihlásit na FTP a v rámci tohoto připojení musíte mít oprávnění měnit oprávnění adresářů a souborů. Nebývá to pravidlem! Velmi často změna vypadá jako provedená, ale po obnovení výpisu souborů uvidíte, že se nic nezměnilo. Chyba 403 bývá v tomto případě spíše výjimkou a opravdovou chybou, kterou vám v nejhorším případě může opravit jen správce serveru.
Ale často se jedná o ten jednodušší stav – můžete změnit práva na adresář nebo soubor (tj. přidat čtení a zobrazení všem) a chybu 403 tím odstranit.
Nežádoucí odkaz, rozpadlý design
V mobilní verzi vašeho webu se v patičce zobrazuje odkaz, který vede na porno stránky (nebo jakékoliv jiné). Odkaz jste tam neumístili vy, v klasické verzi se neprojevuje, narazili jste na něj náhodou.
Projevem chyby je onen odkaz. Můžete ho odstranit např. tak, že ho smažete ze šablony, pokud ho v ní najdete. Příčinu ale neodstraníte a odkaz se tam nebo jinde objeví znovu. Příčinou je napadení vašeho webu, tzn. v některých souborech je nežádoucí kód, který tam umístil útočník. Tento kód provádí něco, co nechcete nebo co vám škodí (tedy zobrazuje odkaz na nežádoucí stránky, což vás může poškodit „v očích“ Googlu). Takže řešením je najít a odstranit nejen tento kód, ale také kód, přes který se do vašeho webu útočník dostal. A to už je složitější problematika.
Většina uživatelů prostě přeinstaluje WordPress a všechny komponenty, čímž ale příčinu nemusí vůbec odstranit, pokud použijí stejné pluginy a šablony. Je pravděpodobné, že útočník vše zopakuje. A znovu bude úspěšný. Něco se musí udělat jinak.
Bílá obrazovka smrti (WSoD) a/nebo chyba 500 (internal server error)
WSoD je prostě jen bílá plocha místo načtené stránky. Žádný zdrojový kód nemá, je úplně prázdná, není se čeho chytit. Ale přece – Firefox někdy zobrazuje WSoD, ale Chrome zobrazí chybu 500. Často se můžete spolehnout na soubor se záznamem chyb na FTP, kde nějakou informaci najít můžete. Takže WSoD se dá odladit. Chyba 500 znamená, že se zhroutilo vykonávání skriptů z nějakého fakt závažného důvodu. Časté a typické příčiny:
Nedostatek paměti. Projevuje se zprávou
PHP Fatal error: Out of memory (allocated 26214400) (tried to allocate 9175041 bytes) in ...
Příliš krátká doba pro běh skriptu. Projevuje se zprávou:
Fatal error: Maximum execution time of 30 seconds exceeded
Počet sekund se samozřejmě může lišit.
Chyba v kódu. Může jít třeba o zapomenutý středník nebo uzavírací závorku. Nebo chybu s hláškou Call to undefined function. V souboru se záznamem chyb najdete popis a adresu místa, kde se předpokládá zdroj chyby. Pokud není ve vašich silách oprava, pak plugin či téma s poškozeným skriptem smažte a nainstalujte znovu nepoškozený. Přejmenování nestačí, WordPress by jej načítal i tak.
Přidání paměti a času pro skripty
První dvě situace – nedostatek paměti a málo času na běh skriptu – lze opravit následujícím postupem. Pokud se vám podaří realizovat některý z počátečních bodů, další už nejsou potřeba, je to cesta od kováříčka ke kováři.
- Ve wp-config.php zkuste nastavit define('WP_MEMORY_LIMIT', '128M'); Konstantu pro úpravu času jsem nenašel a asi neexistuje.
- Ve functions.php nebo jiném skriptu (včetně wp-config.php) zkuste ini_set('memory_limit', '128M'); a set_time_limit(600);
- V souboru .htaccess nastavte php_value memory_limit 128M a php_value max_execution_time 600. Čísla samozřejmě upravte podle sebe, resp. možností vašeho serveru. Je pravděpodobné, že toto nastavení stále nebude fungovat, protože správce serveru úpravy ze skriptů zakázal.
- Zamiřte do nastavení hostingu a v účtu či profilu vašeho webu hledejte volby, které nastavení umožňují. Pamatujte, že toto nastavení je dominantní, tzn. nastavení ve skriptu je omezeno nastavením zde na hostingu.
- Pokud nenajdete, nezbývá než požádat správce, protože hlavní nastavení se provádí v souboru php.ini, což je konfigurace webového serveru: memory_limit = 128M a max_execution_time = 600 .
Chyba v kódu
Asi se to nestane, pokud to není váš kód. V souboru se záznamem chyb najdete číslo řádku, kde středník chybí nebo se očekávala závorka, a není tam. Doplňte je a problém by se měl vyřešit. Spíše výjimečná situace.
Jak si ověřit, že jsou hodnoty nastavené
Základní nástrojem je příkaz <?php phpinfo(); ?> umístěný do skriptu. Nezapomeňte ho pak zase smazat, poskytuje totiž všechny informace o nastavení serveru, takže je ideální pro útočníky. Některé pluginy obsahují souhrn informací o serveru, např. iThemes Security, WooCommerce nebo All in One SEO Pack. Najdete tam tedy minimálně množství dostupné paměti.
Na obrázku výše vidíte, že MySQL nemá ani minimální požadovanou verzi. To je samozřejmě nedostatek, který je potřeba řešit.
Další chyby, na které můžete narazit
Nelze upravit záhlaví, hlavičky již byly odeslány, chyba je popsána zhruba takto:
Warning: Cannot modify header information - headers already sent by (output started at script1.php:12) in script2.php on line 23
Toto je chyba programátora nebo někdo zasáhl do kódu – lze sem tedy také zařadit (pokus o) napadení vašeho webu. Několikrát jsem zažil, že byla vložena mezera před úvodní <?php, třeba v souboru functions.php nebo podobném. Pokud se jedná o tuto situaci, pak je soubor uveden ve výpisu (script1.php nebo script2.php). Ale stejně tak se může stát, že zde uvedený soubor patří do jádra WordPressu – pak může být napaden, nebo prostě jen načítá plugin či téma vzhledu a chyba v nich se prostě projeví později; pak je reference na soubor zavádějící. Každopádně: Vyhledejte odbornou pomoc.
Chyba při připojení k databázi (Error Establishing Database Connection) znamená, že máte špatné heslo databázové uživatele, nebo název databáze, nebo adresu databázového serveru, případně jméno databázového uživatele. Vše se nastavuje v souboru wp-config.php.
Tím jsou podle mých zkušeností vyčerpány chyby, se kterými se můžete setkat. Nelze tvrdit, že všechny můžete vyřešit snadno, ale některé můžete docela snadno identifikovat. A pro stabilní běh WordPressu vyzkoušejte Český hosting – mají výbornou podporu a kvalitní stroje.