|
<? # 404.php, 8/10/2000. # Traps 404 errors and mails a notice to the webmaster. # Requires PHP 3.0 or newer, and mail capability on your system. # # Copyright 2000 shaun@shat.net under the GNU Public License. # Disclaimer: I wrote this script for me, and it works for me. # If it doesn't work for you, or makes your server explode, # that's life. Please email with questions or bug reports.
# Set these variables to configure the script:
# Set $domain to your domain name (no www)
$domain = "your.domain.com";
# Set $docroot to the URL of the directory which contains your # .htaccess file. Don't include trailing slash.
$docroot = "http://your.domain.com";
# Font face you'd like to use on the 404 page
$fontface = "Verdana";
# Font size you'd like to use on the 404 page
$fontsize = "2";
# Background color of the 404 page (default is white)
$bgcolor = "#ffffff";
# Text color you'd like to use on the 404 page (default is black)
$textcolor = "#000000";
# This script is capable of mailing the details of each 404 error # to the webmaster. Use the $reportlevel variable to control when # you receive these reports. # # 0 = don't use the email capabilities at all # 1 = send email only if the error's referer contains your domain name # (i.e. the 404 was generated by a broken link on your site) # 2 = send email any time a 404 error is generated (useful for tracking # broken links at other sites which link to you)
$reportlevel = 2;
# Set $emailaddress to the email address of whoever should be # notified of 404 errors. Don't escape the @ symbol. This will also # be used as the "from" address on any emails the script generates. # You can leave this unassigned if you're not using email features.
$emailaddress = "you@your.domain.com";
################################################################ # DON'T EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU'RE DOING # ################################################################ # If you want to edit the script, I've commented profusely :) # ################################################################
# The print_details function is what prints the 404 error to # the visitor. As far as I know, PHP3 doesn't incorporate Perl's # print <<"EOT" ability. PHP4 does allow this capability # but the script was written for PHP3. So, you have to use # a lot of echo statements if you want to retain PHP3 compat.
function print_details() { # Request access to the global variables we need global $fontface, $fontsize, $docroot, $REQUEST_URI, $reportlevel; global $bgcolor, $textcolor
# Print the 404 error in web format echo "<html><head><title>404 Not Found</title></head>"; echo "<body bgcolor=\"$bgcolor\" text=\"$textcolor\">"; echo "<b><h1>404 Not Found</h1></b>"; echo "<p><font face=\"$fontface\" size=\"$fontsize\">"; echo "We're sorry. The page you requested, $docroot$REQUEST_URI, doesn't exist"; echo " on this server.</font></p>";
# If an email report is being generated, let the visitor know: if ($reportlevel != 0) { echo "<p><font face=\"$fontface\" size=\"$fontsize\">"; echo "The details of this error have automatically been mailed to the webmaster."; }
# Close up the HTML tags # echo "</body></html>";
return; }
# The send_email function sends the details of the 404 error to the # webmaster.
function send_email() { # Request access to the global variables we need global $REQUEST_URI, $HTTP_REFERER, $emailaddress, $REMOTE_ADDR, $docroot;
# Build the $errortime variable to contain the date/time of the error. # Using date() likely would have been better, but I already had this code # elsewhere, and I'm lazy. $today = getdate(); $month = $today[mon]; $mday = $today[mday]; $year = $today[year]; $hours = $today[hours]; $minutes = $today[minutes]; $errortime = "$month/$mday/$year at $hours:$minutes";
# Create the body of the email message $message .= "404 Error Report\n\nA 404 error was encountered by $REMOTE_ADDR"; $message .= " on $errortime.\n\n"; $message .= "The URI which generated the error is: \n$docroot$REQUEST_URI\n\n"; $message .= "The referring page was:\n$HTTP_REFERER\n\n";
# Send the mail message. This assumes mail() will work on your system! mail("$emailaddress", "404 Error Report", $message, "From: $emailaddress");
return; }
# Done with function declarations. Main function begins here.
# Send a 404 error to the user's browser print_details();
# See whether or not we should send an email report. If so, do it. if ($reportlevel != 0) if ($reportlevel == 1) { if (eregi($domain,$HTTP_REFERER)) send_email(); } else send_email();
# All done! exit;
?>
|