龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

服务器检控代码并实现给手机发送短信

时间:2014-07-22 14:51来源: 作者: 点击:
分享到:
一个白痴类型服务器检控代码,写的非常粗糙,放到这里备忘把。用服务器B检控服务器A,服务器B ping 服务器A,查看返回结果,如果有异常发送给139邮箱,在139邮箱上设置--手机通知-
一个白痴类型服务器检控代码,写的非常粗糙,放到这里备忘把。用服务器B检控服务器A,服务器B ping 服务器A,查看返回结果,如果有异常发送给139邮箱,在139邮箱上设置--手机通知--邮件到达通知--查短信,这样只要服务器有问题手机就能收到短信;
弊端&不足:139邮箱收到邮件后向手机发送短信会有一定延时;必须保证服务器B稳定。

有什么不足希望给予指点。


<?php
 /**
    * 服务器检控
    *	-- 如果ping不同或者丢包情况给139邮箱发送邮件,139邮箱设置手机接收邮件项。
    * @package: 
    * @Files: pingServer.php
    * @Author: 林涛
    * @Date: 2012-8-27 上午11:37:15
    * @Copyright: http://www.iamlintao.com
    * @todo:
    *
    * -----Remarks--------	
    *	
    * --------------------
    */ 
 
	// 这里是你要执行的代码
		
 	exec("ping -c 4 这里写被监控服务器的IP",$rArr); 		// 执行Ping
 	$content = array_reverse($rArr);	// 翻转数组
 	 	
 	$msg_1 = $content[0];	// rtt min/avg/max/mdev = 3.743/3.905/4.314/0.248 ms
 	$msg_2 = $content[1];	// 4 packets transmitted, 4 received, 0% packet loss, time 3003ms	
 	$findme   = 'received, 0% packet loss';	// 查找字符串
 	
 	$pos = strpos($msg_2, $findme);
 	
 	if ($pos === false) {	// 不存在
 		
 		$smtpserver="smtp.163.com";
 		$port =25; 					//smtp服务器的端口,一般是 25
 		$smtpuser = ""; //您登录smtp服务器的用户名
 		$smtppwd = ""; 		//您登录smtp服务器的密码
 		$mailtype = "TXT"; 			//邮件的类型,可选值是 TXT 或 HTML ,TXT 表示是纯文本的邮件,HTML 表示是 html格式的邮件
 		$sender = "";	//发件人,一般要与您登录smtp服务器的用户名($smtpuser)相同,否则可能会因为smtp服务器的设置导致发送失败
 		$smtp = new smtp($smtpserver,$port,true,$smtpuser,$smtppwd,$sender);
 		$smtp->debug = true; 			//是否开启调试,只在测试程序时使用,正式使用时请将此行注释
 		$to = ""; 	//收件人,建议填写139邮箱
 		$dtime = date("Y-m-d H:i:s");
 			
 		$subject = "Abnormal:$dtime $msg_2 ";	// 标题
 		$body = "Abnormal:
 		$dtime
 		$msg_1
 		 			
 		";	// 正文
 			
 		$subject = iconv("UTF-8", "GB2312", $subject);	// 转码
 		$body = iconv("UTF-8", "GB2312", $body);		// 转码
 			
 		$send=$smtp->sendmail($to,$sender,$subject,$body,$mailtype);	// 发送
 			
 		if($send==1){
 			//  			echo "邮件发送成功";
 		}else{
 			//  			echo "邮件发送失败<br/>"; 			
 			}
 				
 		 		
 	}else{	// 存在
 		
 	}
 	 	
	
 /////////////////
 
 /**
  * 发送邮件类
  * @author Administrator
  *
  */
 class smtp{
	
	var $smtp_port;
	var $time_out;
	var $host_name;
	var $log_file;
	var $relay_host;
	var $debug;
	var $auth;
	var $user;
	var $pass;
	var $sock;
	
	function smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass){
		
		$this->debug = true;
		$this->smtp_port = $smtp_port;
		$this->relay_host = $relay_host;
		$this->time_out = 30;
		$this->auth = $auth;
		$this->user = $user;
		$this->pass = $pass;
		$this->host_name = "localhost";
		$this->log_file ="";
		$this->sock = FALSE;
	}
	
	 function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = ""){
	 	
			$mail_from = $this->get_address($this->strip_comment($from));
			$body = ereg_replace("(^|(\r\n))(\\.)", "\\1.\\3", $body);
			$header .= "MIME-Version:1.0\r\n";
			if($mailtype=="HTML")
			{
				$header .= "Content-Type:text/html\r\n";
			}
		 $header .= "To: ".$to."\r\n";
		 if ($cc != "")
		 {
		 	$header .= "Cc: ".$cc."\r\n";
		 }
		 $header .= "From: $from<".$from.">\r\n";
		 $header .= "Subject: ".$subject."\r\n";
		 $header .= $additional_headers;
		 $header .= "Date: ".date("r")."\r\n";
		 $header .= "X-Mailer:By Redhat (PHP/".phpversion().")\r\n";
		 list($msec, $sec) = explode(" ", microtime());
		 $header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">\r\n";
		 $TO = explode(",", $this->strip_comment($to));
	
		 if ($cc != "") {
		 	$TO = array_merge($TO, explode(",", $this->strip_comment($cc)));
		 }
		 if ($bcc != "") {
		 	$TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));
		 }
	
		 $sent = TRUE;
		 foreach ($TO as $rcpt_to) {
		 	$rcpt_to = $this->get_address($rcpt_to);
		 	if (!$this->smtp_sockopen($rcpt_to)) {
		 		$this->log_write("Error: Cannot send email to ".$rcpt_to."\n");
		 		$sent = FALSE;
		 		continue;
		 	}
		 	if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {
		 		$this->log_write("E-mail has been sent to <".$rcpt_to.">\n");
		 	} else {
		 		$this->log_write("Error: Cannot send email to <".$rcpt_to.">\n");
		 		$sent = FALSE;
		 	}
		 	//fclose($this->sock);
		 	$this->log_write("Disconnected from remote host\n");
		 }
		 //echo "<br>";
		 //echo $header;
		 return $sent;
	 }

	/* Private Functions */

	 function smtp_send($helo, $from, $to, $header, $body = ""){
			
			if (!$this->smtp_putcmd("HELO", $helo)) {
				return $this->smtp_error("sending HELO command");
			}
			#auth
			if($this->auth){
				if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))) {
				return $this->smtp_error("sending HELO command");
			}
	
			if (!$this->smtp_putcmd("", base64_encode($this->pass))) {
			return $this->smtp_error("sending HELO command");
		}
		}
		#
		if (!$this->smtp_putcmd("MAIL", "FROM:<".$from.">")) {
		return $this->smtp_error("sending MAIL FROM command");
		}
	
		if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">")) {
		return $this->smtp_error("sending RCPT TO command");
		}
	
		if (!$this->smtp_putcmd("DATA")) {
		return $this->smtp_error("sending DATA command");
		}
	
		if (!$this->smtp_message($header, $body)) {
		return $this->smtp_error("sending message");
		}
	
		if (!$this->smtp_eom()) {
		return $this->smtp_error("sending <CR><LF>.<CR><LF> [EOM]");
		}
	
		if (!$this->smtp_putcmd("QUIT")) {
			return $this->smtp_error("sending QUIT command");
		}
	
		return TRUE;
	 }

	 function smtp_sockopen($address){
	 	
		if ($this->relay_host == "") {
			return $this->smtp_sockopen_mx($address);
		} else {
			return $this->smtp_sockopen_relay();
		}
	 }

	 function smtp_sockopen_relay(){
	 	
		$this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port."\n");
		$this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);
		if (!($this->sock && $this->smtp_ok())) {
			$this->log_write("Error: Cannot connenct to relay host ".$this->relay_host."\n");
			$this->log_write("Error: ".$errstr." (".$errno.")\n");
			return FALSE;
		}
		$this->log_write("Connected to relay host ".$this->relay_host."\n");
		return TRUE;;
	 }

	 function smtp_sockopen_mx($address){
	 	
		$domain = ereg_replace("^.+@([^@]+)$", "\\1", $address);
		if (!@getmxrr($domain, $MXHOSTS)) {
			$this->log_write("Error: Cannot resolve MX \"".$domain."\"\n");
			return FALSE;
		}
		foreach ($MXHOSTS as $host) {
			$this->log_write("Trying to ".$host.":".$this->smtp_port."\n");
			$this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);
			if (!($this->sock && $this->smtp_ok())) {
				$this->log_write("Warning: Cannot connect to mx host ".$host."\n");
				$this->log_write("Error: ".$errstr." (".$errno.")\n");
				continue;
			}
			$this->log_write("Connected to mx host ".$host."\n");
			return TRUE;
		}
		$this->log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).")\n");
		return FALSE;
	 }

	 function smtp_message($header, $body){
	 	
		fputs($this->sock, $header."\r\n".$body);
		$this->smtp_debug("> ".str_replace("\r\n", "\n"."> ", $header."\n> ".$body."\n> "));
	
		return TRUE;
	 }

	 function smtp_eom(){
	 	
		fputs($this->sock, "\r\n.\r\n");
		$this->smtp_debug(". [EOM]\n");
	
		return $this->smtp_ok();
	 }

	 function smtp_ok(){
	 	
		$response = str_replace("\r\n", "", fgets($this->sock, 512));
		$this->smtp_debug($response."\n");
	
		if (!ereg("^[23]", $response)) {
			fputs($this->sock, "QUIT\r\n");
			fgets($this->sock, 512);
			$this->log_write("Error: Remote host returned \"".$response."\"\n");
			return FALSE;
		}
		return TRUE;
	 }

	 function smtp_putcmd($cmd, $arg = ""){
	 	
		if ($arg != "") {
			if($cmd=="") $cmd = $arg;
			else $cmd = $cmd." ".$arg;
		}
	
		fputs($this->sock, $cmd."\r\n");
		$this->smtp_debug("> ".$cmd."\n");
	
		return $this->smtp_ok();
	 }

	 function smtp_error($string){
	 	
		$this->log_write("Error: Error occurred while ".$string.".\n");
		return FALSE;
	 }

	 function log_write($message){
	 	
		$this->smtp_debug($message);
	
		if ($this->log_file == "") {
			return TRUE;
		}
	
		$message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message;
		if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))) {
			$this->smtp_debug("Warning: Cannot open log file \"".$this->log_file."\"\n");
			return FALSE;
		}
		flock($fp, LOCK_EX);
		fputs($fp, $message);
		fclose($fp);
	
		return TRUE;
	 }

	 function strip_comment($address){
	 	
		$comment = "\\([^()]*\\)";
		while (ereg($comment, $address)) {
			$address = ereg_replace($comment, "", $address);
		}
	
		return $address;
	 }

	 function get_address($address){
	 	
		$address = ereg_replace("([ \t\r\n])+", "", $address);
		$address = ereg_replace("^.*<(.+)>.*$", "\\1", $address);
	
		return $address;
	 }

	 function smtp_debug($message){
	 	
		if ($this->debug) {
			//echo $message."<br>";
		}
	 }

	 function get_attach_type($image_tag) { //
	
		$filedata = array();
	
		$img_file_con=fopen($image_tag,"r");
		unset($image_data);
		while ($tem_buffer=AddSlashes(fread($img_file_con,filesize($image_tag))))
			$image_data.=$tem_buffer;
		fclose($img_file_con);
	
		$filedata['context'] = $image_data;
		$filedata['filename']= basename($image_tag);
		$extension=substr($image_tag,strrpos($image_tag,"."),strlen($image_tag)-strrpos($image_tag,"."));
		switch($extension){
			case ".gif":
				$filedata['type'] = "image/gif";
				break;
			case ".gz":
				$filedata['type'] = "application/x-gzip";
				break;
			case ".htm":
				$filedata['type'] = "text/html";
				break;
			case ".html":
				$filedata['type'] = "text/html";
				break;
			case ".jpg":
				$filedata['type'] = "image/jpeg";
				break;
			case ".tar":
				$filedata['type'] = "application/x-tar";
				break;
			case ".txt":
				$filedata['type'] = "text/plain";
				break;
			case ".zip":
				$filedata['type'] = "application/zip";
				break;
			default:
				$filedata['type'] = "application/octet-stream";
				break;
		}
	
	
		return $filedata;
	 }
 }
 
精彩图集

赞助商链接