home *** CD-ROM | disk | FTP | other *** search
- <?
- # 404.php, 8/10/2000. Requires PHP 3.0 or newer.
- # Bugfix 6/6/2001 thanks Kishore!
- # Traps 404 errors and mails a notice to the webmaster.
- # Copyright 2001 shaun@shat.net under the GNU Public License
- # 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 your document root.
-
- $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
- # 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.
- # 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 hack 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" command. PHP4 does allow this capability
- # but the script was written for PHP3. So, you have to use
- # a *lot* of echo statements...
-
- 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.";
- }
- 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();
-
- # Close up the HTML tags
- echo "</body></html>";
-
- ?>
-
-