Jak na chybu 404 pomocí PHP

    1

    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.

    Mohlo by vás zajímat

    1 Příspěvěk v diskuzi

    1. 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