PHP:404错误陷阱并email给管理员的程序

作者:未知 来源:未知 添加时间:2006年7月2日 字体:

<? 

# 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; 



?>

ppdesk