Každý uživatel webu určitě na tuhle nepříjemnost narazil. Jedná se o internal server error s HTTP kódem 500. Není to nic neobvyklého a z 99% není chyba na vašem přijímači. V tomto článku se podíváme, co tuto chybu nejčastěji způsobuje, jak to je ve WordPressu a jak úspěšně chyby odchytit. Také se dozvíte, jak správně informovat uživatele o problému.
Co znamená chyba 500?
Podle názvu “internal server error” bychom se domnívali, že za chybu může pouze server. To ale není pravda, protože často za chybu může právě chyba v aplikaci. Není to nic neobvyklého, jsme jenom lidi a špatný kód nebo nepromyšlená situace už k životu programátora prostě patří. Důležitý je hlavně vědět, že tyto chyby se dějí. Jejich vyřešení je už mnohem jednodušší.
Quick fix na straně uživatele? Pomůže maximálně refresh stránky a promazání cache. Nic víc kromě kontaktování majitele stránek bohužel nezmůžete.
Nejčastější důvody při chybě 500?
Podíváme se na ty nejčastější důvody, které jsme u Váš Hosting vypozorovali. Bohužel možností je dost a budete muset ověřit více zdrojů. Tak pojďme na to.
VPS Centrum
Vyzkoušejte zdarma naši aplikaci pro správu serveru a domén. Budete si připadat jako zkušený administrátor.
Rozdílné verze PHP
Často se stane, že programátor má kód (web, aplikaci) přizpůsobený pouze pro verzi PHP 5.6 a majitel webu nemá tušení co to znamená. Tak u svého hostingového providera požádá, jestli by mohl verzi navýšit na PHP 7x, protože slyšel, že je o 30% rychlejší. Provider požadavků vyhoví a za chvíli dostane hovor od naštvaného majitele, že mu rozbili web.
Nezkušený majitel webu, bohužel neví, že nestačí změnit pouze verzi PHP na serveru. Nejdříve se totiž musí “aktualizovat” zdrojový kód, aby byl kompatibilní s novější verzí. Pak bude i rychlejší o těch 30%. Tak na to nezapomínejte.
U nás si zákazníci mohou verzi změnit i sami. Ať už na webhostingu nebo na serverech z naší administrace VPS Centra. Snažíme se zákazníkům život zpříjemňovat, ale bohužel se občas stane pravý opak. 🙂
Rozdílné nastavení PHP
PHP má různá rozšíření a nastavení. To opět může způsobit problém, když aplikace nebo web očekává nějaké chování od PHP a nedočká se ho. To způsobí paseku a zobrazí se právě chyba 500.
Stačí do .htaccessu přidat zobrazování PHP chyb
“php_flag display_errors on“
Pak přidáme kousek kódu do PHP souboru, který byl zodpovědný za zobrazování obsahu.
“
ini_set(‚display_errors‘, 1);
?>
“
Freelo - Nástroj na řízení úkolů a projektů
Přidej se, pozvi svůj tým a klienty, rozděl práci a sleduj, jak se úkoly dají do pohybu.
a po otevření stejné stránky se chyby podrobně zobrazí a můžete je začít řešit.
Hostingový provider ale není za vaše webové stránky či aplikace zodpovědný a s tímto vám přímo nepomůže. To samozřejmě neznamená, že vás Váš Hosting nechá na holičkách. Pomůžeme vás nasměrovat k najití zakopaného psa.
Došlo místo na disku
Toto se u nás stane pouze na VPS, pokud budete ignorovat notifikační e-mail, který o docházejícím místě na serveru informuje. Jakmile nebude mít server kam ukládat cookies nebo data do databáze, tak nastává opravdový problém.
Určitě se bude hodit návod, jak si na VPS navýšit parametry bez našeho zásahu. Tento návod ale funguje jen v případě, že serveru už nedošlo místo úplně. To nám pak raději zavolejte…
Na webhostingu vám pouze pošleme notifikační e-mail. Váš web to ale nijak neovlivní, protože “fyzicky” na disku místo stále je. Chodí vám pak automatizované oznámení, že překračujete pronajatý prostor a jednou za měsíc to spolu řešíme.
Je nutné si tedy na místo dávat pozor a případně se svého providera zeptejte, jak danou situaci řeší. Nejlepší řešení, je ale přechod k nám. S tím vám pomůže náš skvělý návod: Jak na migrace.
Chyba v kódu
Další část alchymie se děje i ve zdrojovém kódu aplikace nebo webu. Chyba 500 může vyskočit např. když:
- chybí středník
- volá se neexistující funkce
- rozšíření PHP není na serveru dostupné
- zdrojový kód není aktualizovaný na používanou PHP verzi
Když programátoři pracují na více projektech zároveň, tak mohou zapomenout, že každý projekt a server je nastaven trochu jinak. Problémy jsou často snadno řešitelné, jen je potřeba o nich vědět. Po přečtení celého článku budete experti na řešení chyb 500. 🙂
Špatná oprávnění
Může se stát, že webové soubory či složky mají špatně nastavená oprávnění. Ověřte si např. pomocí WinSCP zda veškeré složky a soubory mají správné oprávnění. Nejčastěji 755. Můžete se také připojit na SSH a ve složce webu oprávnění zkontrolovat. Stačí ve složce zadat příkaz “ll” (dvě malá L) a zobrazí se oprávnění daných souborů či složek.
Většina skriptů vyžaduje read/write/execute pro majitele souboru a read/execute pro skupiny a všechny ostatní uživatele (tedy 755). Práva můžete jednoduše změnit příkazem “chmod 755 (file-name)”
Pokud chyba 500 nezmizí, můžete ještě zkusit změnit práva na “chmod 777”, ALE jenom pro testovací účely. Pokud chyba zmizí, je potřeba skript upravit, tak aby ho nemohl upravovat každý uživatel.
!!!Nezapomeňte pak práva 777 hned změnit!!!
Prověřte skripty
Pokud váš web spoléhá na skripty (například Perl nebo CGI), tak existuje řada věcí, které se mohou pokazit. Nejprve zkontrolujte oprávnění souboru viz výše a pak postupujte podle seznamu:
- Jsou na správném místě a správně pojmenovány? Ověřte, že skripty nebyly přesunuty, odstraněny nebo změnili název.
- Jsou cesty k souborům správné? Mnoho skriptů vyžaduje ke spuštění další soubory a programy. Například, pokud máte skript Perl, začne to cestou k Perlu. Pomocí příkazu “which” můžete najít cestu k Perlu (nebo jinému programovacímu jazyku):which perl”
- Mají skripty oprávnění ke spuštění ve složce, kde jsou umístěny? Možná budete chtít vytvořit jednoduchý testovací skript, kterým to zkontrolujete.
- Ujistěte se, že váš testovací skript je ve stejném jazyce, jako ten, který opravujete a že používá stejnou příponu souboru.
- Byl skript nedávno upraven v textovém editoru, jako je Microsoft Word nebo Wordpad? Programy CGI a další skripty by měly být upraveny pouze pomocí textového editoru, jako je Poznámkový blok nebo BBEdit pro Mac.
- Timeout Error jestli vaše skripty používají nebo volají externí sítě či zdroje, tak se může stát, že nebudou dostupné. Může to být přetížením sítě nebo je problém na třetí straně. Prověřte tedy, že je všechno v pořádku i u “dodavatelů”.
Jak ve WordPressu opravit chybu 500?
Samozřejmě vám pomohou i všechny triky napsané výše, ale WordPress má svá specifika. Pojďme se na ně podívat.
Špatně nakonfigurovaný .htaccess (nejen pro WP)
Nejčastějším důvodem chyby 500 u WordPressu je způsobena právě souborem .htaccess. To je zkratka, kde webserver zkontroluje, jestli se u webu nachází “prioritní” pravidla. Nejčastěji pravidla přidávají pluginy, aniž byste to tušili.
Rychlá pomůcka, jak zjistit problém je jednoduchá. Stačí soubor z .htaccess přejmenovat na .htaccess_test, pak ho bude webserver ignorovat a zobrazí rovnou stránku a vy uvidíte, jestli to pomohlo. Jestli chyba zmizí, tak je potřeba pátrat, co problém způsobuje. Jak jsem zmínil na začátku: Pravidla přidávají často pluginy. Pokud jste nainstalovali nový, tak doporučujeme prověřit, co a jak vlastně dělá.
Další možnost je vytvořit kompletně nový .htaccess a přidat do něj oficiální řádky z WordPress.org. Pokud tam máte ale různá pravidla z pluginů, tak pravděpodobně pluginy nebudou fungovat správně.
“
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
“
PHP limity a nastavení
Všichni víme, že WP není zrovna šetrný k serverovým prostředkům. Občas se stane, že skript vyčerpá limit paměti, který mu byl v souboru PHP.ini přidělen. Pokud do něj máte přístup, tak stačí najít řádek memory_limit a navýšit jej.
Většina webhostingů na českém trhu nedovolí nastavení změnit. Důvod je jednoduchý: snaží se dávat velký počet zákazníků na jeden fyzický server. Naše webhostingové parametry jsou více než příjemné. U nejmenšího tarifu “lite” 256 MB a u tarifů “Profi” či “WordPress” dokonce dohodou.
Na našich virtuálních serverech (VPS) si samozřejmě můžete PHP.ini navýšit dle libosti.
Co problém způsobuje?
Může se to stát při instalaci nové WordPress šablony nebo importování demo obsahu, při kterém se PHP opravdu zapotí.
Dalším častým problémem je špatně naprogramovaný plugin nebo divná funkce šablony. Stačí zjistit, jestli plugin nebo šablona prošla aktualizací a co se přesně změnilo. Můžete to vykomunikovat s tvůrci, kteří budou mít zájem problém vyřešit.
Deaktivace WP pluginů
Stále se zobrazuje chyba 500? Pak musíte přejít k radikálnějššímu řešení. Pokud je chyba v pluginu, tak tímto způsobem na to přijdete. Deaktivaci všech pluginů zvládnete i bez přihlášení do administrace. Nejpohodlnější způsob je po připojení na FTP.
Stačí přejmenovat složku /wp-content/plugins na */pluginstest
Pokud chyba 500 zmizela, tak jsme našli jádro problému. Teď jenom zjistit, který plugin má chybu na svědomí. – Přejmenujeme složku na původní znění a začněte měnit pouze názvy jednotlivých pluginů, dokud toho uličníka neobjevíte. Podobně to můžete provést i z databáze po připojení na PhpMyAdmin, ale FTP způsob je mnohem přehlednější.
Přehrání WP jádra
Pokud se nic z výše uvedeného nepovedlo, tak poslední možnost je přehrání jádra. Postup je jednoduchý a rychlý. Stáhněte si úplně novou instalaci WordPressu, nejlépe tu, kterou používáte. Následně stačí .zip soubor rozbalit a zdrojové soubory složek, /wp-admin a /wp-includes překopírovat na hosting či server do stejnojmenných složek.
Tím jste zvládli přepsat jádro WordPressu. Pomohlo to? Super!
Ne? Tak napište na podporu ať vás pomůže aspoň nasměrovat a pomoct vám vymyslet nějaké řešení..
Jak hlídat WordPress?
Maxiorel.cz napsal skvělý článek o nástroji jménem Tracy přímo pro WordPress, tak pokud to myslíte vážně, tak doporučujeme článek přečíst. Jedná se o jednoduchou komponentu oblíbeného frameworku Nette, která pomůže zobrazovat nejrůznější informace o webové aplikaci.
Jak na odchytávání 500 chyb?
Aby se chyba opravila, tak o ní musíte vědět. Každý správný vývojář by měl znát, jak odchytit “svoje chyby”, aby je následně dokázal ke spokojenosti klienta vyřešit. Proto doporučujeme nastavit reporting přímo na e-mail.
Kde kontrolovat logy?
Často stačí dva logy. Pro PHP a Apache či jiný webserver, který používáte.
Apache2
Na našich serverech logy najdete ve složce “/var/log/apache2/error.log” nebo “/var/log/apache2/název-webu/error.log” pro konkrétní web. Pokud si netykáte s příkazovou řádkou, tak opět doporučuji oblíbený prográmek WinSCP, kterým se na SSH jednoduše přihlásíte a můžete si logy pohodlně prohledat.
Doporučujeme následně v editoru použít klávesovou zkratku CTRL + F a vyhledat “500”
PHP
Logy pro PHP najdete ve složce “/var/log/php7.0-fpm.log” záleží, jakou verzi zrovna web využívá a podle toho budete hledat. Doporučujeme využít postup popsaný výše a podle vypsané chyby se zařídit. Chybu si napsat do googlu a někdo na stackoverflow.com už řešení určitě našel.
Seznamte se s Tracy
Užitečná knihovna jménem Tracy, která by neměla chybět v repertoáru žádného PHP programátora.
Tracy pomůže:
- rychle odhalit a opravit chyby (nejen 500 🙂
- logovat chyby
- jak vypisovat proměnné
- měřit čas a paměťové nároky
- pošle e-mail o chybě
Knihovna Vám určitě zachrání pár vlasů na hlavě. To oceníte v pozdějším věku. 🙂
Jak správně informovat uživatele a přidat vlastní chybovou stránku?
Poslední části dnešního článků se podíváme, jak správně informovat návštěvníka webu nejen o chybě 500.
Je dobré návštěvníka informovat o tom co se zrovna děje. Jak jsme si dnes vysvětlili, tak zrovna chyba 500 není chyba uživatele a měl by o tom vědět. Stačí si připravit hezkou grafickou stránku, jako máme např. my a jen se omluvit za vzniklé potíže s odkazem na domovskou stránku. Upozornit, že chyba není na jeho straně a nějaký kontakt, na kterém může návštěvník na chybu upozornit.
Jsou dva způsoby, jak svojí vlastní chybovou stránku přidat.
.HTACCESS
Nejdříve musíte vlastní chybové stránky nahrát do root složky /www
Následně do .htaccessu přidejte tento řádek:
ErrorDocument 500 /500.html
Pro každý dokument je třeba jeden řádek. Doporučujeme ale nastavení dělat přes hlavní konfigurační soubor.
Konfigurační soubor web serveru
V našem případě se jedná o Apache2 a díky našemu úžasnému VPS Centru změnu provedete velice snadno. Stačí se přihlásit do administrace a v sekci Nastavení najít konfigurační soubor Apache2 a vložit tento řádek. Ve VPS centru tento soubor ale naleznete 2x. První je u nastavení domény. Ten platí pro doménu. Pak je ještě jeden, který je u nastavení serveru. Ten je templatem pro nové domény.
# #####only vas-hosting.cz.cz and www.vas-hosting.cz ####
DocumentRoot /www/hosting/vas-hosting.cz/www
ServerName vas-hosting.cz
ServerAlias www.vas-hosting.cz
ServerAlias www.vas-hosting.cz.xxx00.vas-server.cz vas-hosting.cz.xxx00.vas-server.cz
ErrorDocument 500 /homemade_50x.html
Use vas-hosting.cz
Poté stačí webserver restartovat. To také zvládnete hned z našeho VPS Centra a je hotovo. Nic těžkého. 🙂
Na závěr se může inspirovat se dalšími příklady chybových stránek.
Zdroje:
https://www.ionos.com/community/server-cloud-infrastructure/apache/how-to-fix-http-error-code-500-internal-server-error/
https://www.wplama.cz/co-zpusobuje-internal-server-error/
https://uicookies.com/500-error-page-templates/
https://dribbble.com/shots/1777469-500-Malfunction
https://cdn.sketchrepo.com/images/2x/sketch-error-pages-k5.png
https://cz.pinterest.com/pin/442549100874786819/?lp=true