Version: 0.9
Type: Full Script
Category: HTTP
License: GNU General Public License
Description: This script notifies webmaster on 401,403,404 and 500 errors through e-mail, sms and icq. Very usefull for dynamic site webmasters…
<? # THIS IS THE CODE I PUT IN MY ERROR PAGES! I USE IT TO DEFINE DYNAMIC VARIABLES # AND TO INCLUDE MAILME.PHP WHICH USES THOSE VARIABLES! # You can define whether to send e-mail to webmaster, SMS message to # webmaster's cell phone, or even ICQ number. Use the $notifylevel # variable to control how to receive these reports. # # 0 = don't use the email capabilities at all # 1 = send only email to webmaster any time an error is generated, useful # for tracking broken links at other sites which link to you # (i.e. the 404 was generated by a broken link on someones site) # 2 = send email to webmaster in any cases and SMS message to his cell phone # only if the error's referer contains your domain name (i.e. the 404 # was generated by a broken link on your site) # 3 = send email to webmaster in any cases and ICQ message to his ICQ number # only if the error's referer contains your domain name (i.e. the 404 was # generated by a broken link on your site) # 4 = send email to webmaster in any cases, and if the error's referer contains # your domain name, SMS message to his cell phone and ICQ # message to his ICQ number $notifylevel = 2; # Define error number. I use only 401 (Authorization Required), 403 (Forbidden) # 404 (Page Not Found) and 500 (Internal Server Error). $errornumber = 401; include($DOCUMENT_ROOT . '/mailme.php'); ?> <? ################### # MAILME.PHP v0.9 # ################### # First of all, I would like to apoplogize because some parts of this code # (most of all, echo commands) contain text in my language (serbian), and # I really didn't have time to translate everything, so if you have any # problems (or if you make something even better), plese, don't hesitate to # write me at [email protected] # --- FIRST, DEFINE VARIABLES! --- # --- E D I T A B L E --- # Define a domain name. It is best not to use the www. prefix because # you can use this variable later for e-mail addressing. $domain = "afwebteam.co.yu"; # Define a short domain name. It will be shown only in messages sent # to SMS and ICQ for saving number of characters. $shortdomain = "afwt"; # To whom to send email? $to = "[email protected]"; # To whom to send sms? $sms_to = "[email protected]"; # To what ICQ number to send message? $icq_to = "17772503"; # What will be the sender's name of message webmaster recieves through ICQ? $icq_name = "$shortdomain server -> ERROR $errornumber !"; # Whos e-mail will be shown to webmaster's ICQ when he gets an error notification? $icq_email = "[email protected]"; # Define Headers $headers = "From: [email protected]"; $headers .="X-Sender: <[email protected]>n"; $phpver = phpversion(); $headers .= "X-Mailer: PHP " . $phpver . "n"; //mailer $headers .= "X-Priority: 1n"; //1 UrgentMessage, 3 Normal # --- AND NOW, THE FUNCTIONS! --- # --- N O T E D I T A B L E --- # (unless you know what you're doing) # Is mail sent ok? For now, it's not! You can use it later in your own IF # expressions to define the rest of your PHP page. (i.e. to write 'Webmaster # is notified about this error' or 'Webmaster is not notified about this error. # Please, send him e-mail here') $emailsent = False; # Function that sends e-mail to webmaster, defined in $to variable bellow. # This function will be proccessed if $notifylevel>0, and only this function # returns $emailsent variable for checking purposes is the mail sent or not. function send_email() { # Request access to the global variables we need global $REQUEST_URI, $HTTP_REFERER, $REMOTE_ADDR; global $to, $domain, $errornumber, $emailsent, $headers; # Create Subject. $subject = "Greska $errornumber na adresi: $domain$REQUEST_URI"; # Build the $errortime variable to contain the date/time of the error. $errortime = datum(); # Create the body of the email message $message = "PRIJAVA GRESKE $errornumber !nn"; $message .= "Gresku $errornumber na adresin$domain$REQUEST_URIn"; $message .= "prijavio je $REMOTE_ADDR u $errortime sa adresen$HTTP_REFERERnn"; # Send the mail message. if (mail($to,$subject,$message,$headers)) $emailsent = True; return; } # Function that sends SMS to webmaster's phone, which, in my case, needs only # to send an e-mail message to [email protected], as defined in # $sms_to variable bellow. Maybe you will have to mess with this part a bit if # your operater allows only text in Subject field, etc. If your cell operater # does not support E-mail2SMS feature, at www.phpbuilder.com you can find a # function that was written by bobwhite that sends SMS message through Simplewire # Network that supports over 100 countries. This function will be proccessed if # $notifylevel value is 2 or 4. function send_sms() { # Request access to the global variables we need global $REQUEST_URI, $HTTP_REFERER, $REMOTE_ADDR; global $shortdomain, $sms_to, $errornumber, $headers; # Build the $errortime variable to contain the date/time of the error. $errortime = date("d/m/y u G:i:sh"); # Create Subject. $body = "Gresku $errornumber na adresi $shortdomain$REQUEST_URI "; $body .= "sa adrese $HTTP_REFERER "; $body .= "prijavio je $REMOTE_ADDR dana $errortime"; # Send the mail2SMS message. We don't need subject, because it goes to SMS... mail($sms_to,"",$body,$headers); return; } # Function that sends ICQ message to webmaster through www.icq.com web interface. # This function is originally written by Thomas Pokorny, but I included (a little # bit changed to fit my other code) modified version by Michal Taborsky # <[email protected]> that I found on www.phpbuilder.com. This function will be # proccessed only if $notifylevel value is 3 or 4. They didn't bother to comment it, # so neither did I. I described the variable usage, though. function send_icq() { # Request access to the global variables we need global $REQUEST_URI, $HTTP_REFERER, $REMOTE_ADDR; global $domain, $icq_to, $icq_name, $icq_email, $errornumber, $headers; # Create Subject. $subject = "Greska $errornumber na adresi: $domain$REQUEST_URI"; # Build the $errortime variable to contain the date/time of the error. $errortime = datum(); # Create the body of the email message $message = "PRIJAVA GRESKE $errornumber !nn"; $message .= "Gresku $errornumber na adresin$domain$REQUEST_URIn"; $message .= "prijavio je $REMOTE_ADDR u $errortime sa adresen$HTTP_REFERERnn"; # Original ICQSend() code. $variables = "from=".RawURLEncode($icq_name)."&fromemail=".RawURLEncode($icq_email)."&subject=".RawURLEncode($subject)."&body=".RawURLEncode($message)."&to=$icq_to&Send=Send+Message"; $request = "POST http://wwp.icq.com/scripts/WWPMsg.dll HTTP/1.0 Referer: http://wwp.icq.com/$icq_to Proxy-Connection: Keep-Alive User-Agent: Mozilla/4.72 [en] (X11; U; Linux 2.2.17 i686) Host: wwp.icq.com Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */* Accept-Encoding: gzip Accept-Language: en Accept-Charset: iso-8859-1,*,utf-8 Content-type: application/x-www-form-urlencoded Content-length: ".strlen($variables)." $variables"; if ($fs = fsockopen("wwp.icq.com",80)) { fputs($fs, $request); fclose($fs); } else echo "<p>Error while connecting to www.icq.com.<br>Webmaster is not notified with ICQ.</p>"; } # I use functions bellow to format date/time written in messages to # webmaster used for $errortime variable. You don't have to use it # if your language is english, but then you have to modify the rest # of tis script. function datum() { $dan = date("l"); switch($dan) { case "Sunday": $dan = "Nedelju"; //change in your language break; case "Monday": $dan = "Ponedeljak"; //change in your language break; case "Tuesday": $dan = "Utorak"; //change in your language break; case "Wednesday": $dan = "Sredu"; //change in your language break; case "Thursday": $dan = "Cetvrtak"; //change in your language break; case "Friday": $dan = "Petak"; //change in your language break; case "Saturday": $dan = "Subotu"; //change in your language } $mesec = date("n"); switch($mesec) { case "1": $mesec = "januara"; //change in your language break; case "2": $mesec = "februara"; //change in your language break; case "3": $mesec = "marta"; //change in your language break; case "4": $mesec = "aprila"; //change in your language break; case "5": $mesec = "maja"; //change in your language break; case "6": $mesec = "juna"; //change in your language break; case "7": $mesec = "jula"; //change in your language break; case "8": $mesec = "avgusta"; //change in your language break; case "9": $mesec = "septembra"; //change in your language break; case "10": $mesec = "oktobra"; //change in your language break; case "11": $mesec = "novembra"; //change in your language break; case "12": $mesec = "decembra"; //change in your language } $datum = $dan . date(", j. ") . $mesec . date(" Y. u G:i:sh"); return $datum; } # --- AND AT THE END, THE CODE! --- # See whether or not we should send an email report. If $notifylevel>1, # it will compare $domain with $HTTP_REFERER, because if they match, it # means that a reffering page is from webmaster's site, and that is # sometimes an emergency that requires ICQ or SMS for urgent notification. if ($notifylevel == 1) { send_email(); } elseif ($notifylevel == 2) { send_email(); if (eregi($domain,$HTTP_REFERER)) send_sms(); } elseif ($notifylevel == 3) { send_email(); if (eregi($domain,$HTTP_REFERER)) send_icq(); } elseif ($notifylevel == 4) { send_email(); if (eregi($domain,$HTTP_REFERER)) { send_sms(); send_icq(); }; }; # An example of $emailsent variable usage. # if ($emailsent) { # echo "<p>E-mail sent to $to.</p>"; # } else { # echo "<p>E-mail was not sent to $to.<br>"; # echo "Please, send it manually to <a href'$to'>$to.</a></p>"; # }; ?>