Jak na chybu 404 pomocí PHP

16. prosince 2001

Chyba 404 je chyba, která ohlašuje, že požadovaná stránka nebyla na doméně nalezena. Její zobrazení a upozornění se dá upravit. Navíc si ji můžete nastavit tak, abyste dostali zprávu, která vás bude informovat, kde se případná chyba nachází (požadované URL).

Chyba 404 je na mnoha z placených webhostingů povolena a nahrává se do rootu domény (tj. umístění bude http://www.vasedomena.cz/missing.php). Tato "funkce" funguje i u některých "freewebhostingů".

Struktura souboru missing.php

$domena = "www.vasedomena.cz"; // doména, na které je MISSING umístěn (bez HTTP)
$docroot = "http://www.vasedomena.cz"; // doména umístění včetně HTTP
$fontface = "Verdana"; // druh písma, kterým bude napsaná chyba 404
$fontsize = „2“; // velikost písma $fontface
$bgcolor = "#ffffff"; // barva pozadí stránky
$textcolor = „#000000“; // barva textu pro znění chyby 404

Proměnná $domena je URL domény, na které máte nahraný skript. Zde zadáváte adresu bez http://, podobný význam má také proměnná $docroot, kterou zadáváte s předponou http://. Tyto proměnné se budou používat ve funkcích pro odeslání zprávy e-mailem. $fontface je název fontu textu chyby, $fontsize udává jeho velikost. Proměnná $bgcolor udává barvu pozadí stránky a proměnná $textcolor v sobě ukrývá barvu písma pro ohlášení chyby.

Kritéria, která budou platit pro zasílání / nezasílání zprávy při výskytu chyby:

# 0 = neposílat upozornění e-mailem
# 1 = zaslat zprávu pouze tehdy, je-li chyba vygenerovaná z nějakého odkazu z vaší domény
# 2 = zaslat zprávu, je-li chyba na nějakém odkazu na vaší stránce nebo když přichází někdo odjinud
$reportlevel = 2; // doporučuji 2
$emailaddress = "jmeno@vasedomena.cz"; // adresa, na kterou se odešle upozornění na chybu

V této části jsou jen dvě proměnné, první je $reportlevel(obsahuje číslo od 0 do 2, dle výše uvedených kritérií) a druhá je $emailaddress s vaším emailem. Jestliže chcete poslat zprávu na více adres, použijte tento vzor: $emailaddress = "jmeno@vasedomena.cz; jmeno2@vasedomena.cz"; (adresy jsou oddělené středníkem a mezerou).

/* Funkce print_details slouží k vypsání chybové hlášky návštěvníku, tj. vypsání HTML kódu stránky. */
function print_details()
{
//  Přes global pošlete "požadavek" pro potřebné proměnné:
global $fontface, $fontsize, $docroot, $REQUEST_URI, $reportlevel;
global $bgcolor, $textcolor;
echo „<HTML><HEAD>
<TITLE>404 – požadováná stránka nebyla nalezena</TITLE>
<META content=\"text/html; charset=windows-1250\" http-equiv=Content-Type></HEAD>
<BODY aLink=’#000000′ bgColor=’#ffffe0′ link=’#ffffff‘ text=’#000000′ vLink=’#dedede‘ aLink=’#dedede‘>
<br><br><br><br><center>
<font face=\"$fontface\" size=\"$fontsize\">
<H2>404 Not Found</H2>
<H3>Nenalezeno</H3>
<BR>
Vámi hledaný dokument nebyl na serveru nalezen!
<BR>";
// Jestliže bude administrátor informován, tak o tom můžete dát vědět i návštěvníkovi:
if ($reportlevel != 0)
{
echo „";
echo „Administrátor byl při zobrazení této chyby informován. Pokud má stránka existovat, brzy bude v provozu!";
}
// zavřete HTML
 echo „<BR>
<B>KONTAKT: <A href=\"mailto:$emailaddress\">$emailaddress</A> | Návrat na <a href=\"$docroot\">$docroot</a></B>
</FONT></center></body></html>“;
return;
}

V této částo se zobrazí celá HTML stránka pro návštěvníka. Níže je ale příkaz if ($reportlevel != 0){…} – tím je řečeno, že když nebude proměnná $reportlevel nula, napíše se, že byl administrátor informován.

function send_email()
{
global $REQUEST_URI, $HTTP_REFERER, $emailaddress, $REMOTE_ADDR, $docroot;
$dnes = getdate(); // proměnná pro datum
$d_mes = $dnes[mon];
$d_den = $dnes[mday];
$d_rok = $dnes[year];
$d_hodina = $dnes[hours];
$d_minuta = $dnes[minutes];
$cas_erroru = „$d_den.$d_mesic.$d_rok v $d_hodina:$d_minuta“;
// obsah zprávy
$zprava .= „404 Chyba\n\n 404 byla zjistena na: $REMOTE_ADDR“;
$zprava .= “ $cas_erroru\n\n";
$zprava .= „Chyba byla zaznamenana na URL: \n$docroot$REQUEST_URI\n\n“;
$zprava .= „Referovana stranka byla:\n$HTTP_REFERER\n\n“;
// pošle zprávu
mail(„$emailaddress“, „404 Chyba – $domena“, $zprava, „From: $emailaddress“);
return;
}

Přes proměnné $dnes a $cas_erroru získáte datum a čas ve tvaru např.: 30.6.2001 v 13:45. Pomocí funkce mail() pak danou zprávu odešlete.

print_details();
if ($reportlevel != 0)
if ($reportlevel == 1) {
if (eregi($domena,$HTTP_REFERER))
send_email(); }
else
send_email();
// hotovo
exit;
?>

Zde je nejdůležitější část stránky – vypsání funkce print_details() a případné odeslání zpráv. Jak si můžete všimnout, $reportlevel se nesmí rovnat 0. Jestliže je $reportlevel roven 1, zkontrolujte, zda-li je chyba hlášena opravdu ze stejné domény jako je uvedena v $domena, jestliže ano, pak vyvolá PHP funkci send_email a na závěr else, které platí pro všechny $reportlevel kromě 0 a 1.

Zdrojové kódy si můžete stáhnout zde.

Odkazy a zdroje

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Předchozí článek Význam ostrůvků v XML
Další článek Instalujeme MySQL na Linux

Mohlo by vás také zajímat

Nejnovější

1 komentář

  1. Filip

    Čvn 15, 2012 v 6:54

    Ahoj, mam menší problém, udělal jsem v práci webovku s dokumentaci (nic složitého) kliknu na tlacitko, zobrazí se mi fancybox s přihl. formulářem, zadám údaje, přihlásím a skočí mi chyba 404, ale ovšem jen když to je z venčí na zabezpečený server (https). Lokálně v naší síti to maká víc jak na 100%

    Odpovědět

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *