Web development: Dynamická chybová stránka (PHP a mod_rewrite)
| Zobrazit obsah | Zobrazit komentáře | Zobrazit pouze komentáře
|
Zdrojový kód chybové stránky
Následující zdrojový kód dynamické chybové stránky obsahuje rozšířenou
XHTML hlavičku, aby výsledek odpovídal standardu W3C. Samotný skript, v části
okomentované jako Get SERVER variables, převezme od serveru
údaje potřebné pro zpracování chyby. Hlavním a klíčovým je $redirect_status,
proměnná, která obsahuje číslo chyby. Podle této chyby se generuje obsah výsledné
stránky. Určitě by šel skript zkrátit, přepsat jinak a jednoduše, ale plně vyhovuje
účelu a rychlost zde není podstatná. Za úvahu by možná stálo odstranění redundantních
konstrukcí. Použitá chybová hlášení jsou v angličtině, protože jsem měl problém nalézt
vhodná chybová hlášení v češtině a nechtělo se mě nějaké krkolomné vymýšlet.
Samozřejmě je možné další chybové zprávy přidávat, případně dokonce ubírat.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2" />
<meta name="copyright" content="(c) kavalek.net 2006" />
<meta name="author" content="(c) Kavalek Tomáš; e-mail: tomas.kavalek@gmail.com" />
<meta lang="cs" name="description" content="KAVALEK.NET" />
<link rel="home" href="http://kavalek.net" />
<link rel="icon" href="/favicon.png" type="image/png" />
<link rel="stylesheet" type="text/css" media="screen" href="/css/error.css" />
<title>KAVALEK.NET</title>
</head>
<body>
<div class="logo" onclick="location.href='http://kavalek.net/';">
<span class="kavalek">KAVALEK</span>.<span class="net">NET</span>
</div>
<div class="error">
<?php
// Setup admin e-mail
$admin_email = "tomas@kavalek.net";
// Get SERVER variables
$redirect_status = $_SERVER["REDIRECT_STATUS"];
$http_referer = $_SERVER["HTTP_REFERER"];
$request_uri = $_SERVER["REQUEST_URI"];
$remote_addr = $_SERVER["REMOTE_ADDR"];
$server_name = $_SERVER["SERVER_NAME"];
// URL
$request_url = "http://" . $server_name . $request_uri;
$request_link = "<a href=\"" . $request_url . "\" title=\""
. $request_url . "\">" . $request_url . "</a>";
// Common message for all messages
$common_message = "<p>\n"
. "If this problem persists please report it by sending an e-mail to"
. " <a href=\"mailto:" . $admin_email . "?Subject=Error_"
. $redirect_status . "__" . $request_url . "\" title=\"E-mail\">$admin_email</a>"
. " mentioning the error message received and the page you were trying to"
. " reach. We are sorry for any inconvenience caused and we will do all we"
. " can to fix the error as soon as possible."
. "</p>\n";
// Error messages
switch($redirect_status) {
case 400 : $error_name = "Error 400 - Bad Request";
$error_description = "<h1>Bad Request</h1>\n"
. "<p>Error 400</p>\n"
. "<p>\n"
. "The URL that you requested (" . $request_link
. "), was a bad request.\n"
. "</p>\n"
. $common_message;
break;
case 401 : $error_name = "Error 401 - Unauthorised";
$error_description = "<h1>Authorization Required</h1>\n"
. "<p>Error 401</p>\n"
. "<p>\n"
. "The URL that you requested (" . $request_link
. "), requires pre-authorization to access.\n"
. "</p>\n"
. $common_message;
break;
case 403 : $error_name = "Error 403 - Access Forbidden";
$error_description = "<h1>Access Forbidden</h1>\n"
. "<p>Error 403</p>\n"
. "<p>\n"
. "Access to the URL that you requested (" . $request_link
. "), is forbidden.\n"
. "</p>\n"
. $common_message;
break;
case 404 : $error_name = "Error 404 - Page Not Found";
$error_description = "<h1>File Not Found</h1>\n"
. "<p>Error 404</p>\n"
. "<p>\n"
. "We are sorry but the page you are looking for (" . $request_link
. ") cannot be found.\n"
. "</p>\n"
. $common_message;
break;
case 408 : $error_name = "Error 408 - Request Timeout";
$error_description = "<h1>Request Timeout</h1>\n"
. "<p>Error 408</p>\n"
. "<p>\n"
. "Request was stopped before the server finished it.\n"
. "</p>\n"
. $common_message;
break;
case 500 : $error_name = "Error 500 - Server Configuration Error";
$error_description = "<h1>Server Configuration Error</h1>\n"
. "<p>Error 500</p>\n"
. "<p>\n"
. "The URL that you requested (" . $request_link
. "), resulted in a server configuration error."
. " It is possible that the condition causing the"
. " problem will be gone by the time you finish reading this.\n"
. "</p>\n"
. $common_message;
break;
case 501 : $error_name = "Error 501 - Not Implemented";
$error_description = "<h1>Not Implemented</h1>\n"
. "<p>Error 401</p>\n"
. "<p>\n"
. "Web server doesn't support a requested feature.\n"
. "</p>\n"
. $common_message;
break;
default : $error_name = "Uknown error";
$error_description = "<h1>Uknown error</h1>\n"
. "<p>Error 000</p>\n"
. "<p>\n"
. "The URL that you requested, resulted in an unknown error."
. "</p>\n"
. $common_message;
break;
}
// Display error message
echo($error_description);
printf("<p><a href=\"javascript:history.go(-1);\" title=\"Go back\">"
. "« Previous page.</a></p>");
?>
</div>
</body>
</html>
Úprava .htaccess
Ještě zbývá upravit soubor .htaccess a dynamické chybové stránky
jsou připraveny k použití. Upravený soubor .htaccess může vypadat
například takto:
# Error documents definition ErrorDocument 400 /errpages/errorpage.php ErrorDocument 401 /errpages/errorpage.php ErrorDocument 403 /errpages/errorpage.php ErrorDocument 408 /errpages/errorpage.php ErrorDocument 500 /errpages/errorpage.php
Blog
