*PHPとShell Command [#o905202e]

RIGHT:更新日&lastmod();

**ディレクトリのTree構造取得 [#m42efb28]

 // ファイル転送ディレクトリをtree状に取得
 $cmd = "/usr/bin/tree -NsD /home/user1/backup > /home/jcn/script/tmp.log";
 
 $ret = exec($cmd);
 
 $msg = $msg . "\n\n------------------\n\n";
 
 
 // 文字化けを20h(半角スペースに変換 \40は8進でスペース)
 $cmd = "/bin/cat /home/jcn/script/tmp.log | /usr/bin/tr '\240\302' '\040\040' > /home/jcn/script/user1_2.log";
 
 $ret = exec($cmd);

  

**Ping 実行shell [#ue786ccb]

次のmypingというshellで出るlogをWebで表示

 #! /bin/sh
 date >> ~okada/log/pinglog
 ping -c3 202.59.187.76 >> ~okada/log/pinglog

**Ping 実行shell Web表示サンプル [#x03d7ede]

 <?php
 
 $match ="^rtt";
 $fp = popen("/usr/bin/tail -200 ~okada/log/pinglog", "r");
 while (!feof($fp)) {
         $line = fgets($fp, 1024);
         printf("%s <br>\n", $line);
         if (mb_ereg($match, $line)) {
                 echo " <HR> Date : ";
         }
 }
 
 pclose($fp);
 
 ?>

[[サンプル:http://uso5004.mie-chukyo-u.ac.jp/~okada/mypinglog/]]

**Pingでリモートの監視(Error時メール自動発信) [#zafc3ff7]

-mbstringのInstall

 # yum install php-mbstring 

以下のshellスクリプトをpinglog生成のため作成し、cronに登録

 #! /bin/sh
 export LANG=ja_JP.eucJP
 
 date > ~okada/log/pinglog.err
 ping -c2 wwwism.dyndns.org >> ~okada/log/pinglog.err 2>&1 <==標準エラーも記録
 ping -c2 202.91.212.66 >> ~okada/log/pinglog.err
 /home/okada/script/icmpcheckmail.php > /dev/null 2>&1 <=nullに全てリダイレクトしないとcron実行ごと、管理メールが配信される。

icmpcheckmail.phpで

 #!/usr/local/bin/php -q
 
 <?php
 
 //Ping(ICMP)でパケットロスしたらメールを送る
 
         $mailaddress = "okada@abc.ac.jp";
 
         $fp = @fopen("/home/okada/log/pinglog.err", "r");
         if (!$fp) exit;
         $flag = 0;
         $msg= "";
         $s0 = "";
         $s = "";
         while(!feof($fp)){
                 $s = fgets($fp, 4096);
                 $msg = $msg . $s;
                 if(strpos($s, "パケット損失 100%")){//ROUTER ERR :3
                         if(strpos($s0, "wwwism")){//DDNS ERROR :1
                                 $flag = $flag + 1;
                         }else{// DHCP Changed :2
                                 $flag = $flag + 2;
                         }
                 }
                 //DDNS Servce Error: DDNSで名前解決してくれない
                 if(strpos($s, "不明なホスト")) $flag = $flag + 4;
                 $s0 = $s;
         }
 
         if ($flag == 0) exec("/bin/echo 0 > /home/okada/log/pinglog.flag");
 
         fclose($fp);
 
 //ファイルから1行ごと配列の取り込む
         $array = file("/home/okada/log/pinglog.flag");
         $fflag = $array[0];
 
 //メール送信
         if($flag != 0 && $fflag == 0){
 
                 if($flag == 1){
                         $subject = "DDNS Error";
                 }else if($flag == 2){
                         $subject = "DHCP Changed";
                 }else if($flag == 3){
                         $subject = "ROUTER Error";
                 }else{
                         $subject = "DDNS Service Error";
                 }
                 $subject = mb_convert_encoding($subject, "ISO-2022-JP", "EUC-JP");
                 $subject = mb_encode_mimeheader($subject, "ISO-2022-JP", "B");
 
                 $fp = popen("/usr/bin/nkf -m0 | /usr/sbin/sendmail -oi -t","w");
                 fwrite($fp, "From: okada@abc.ac.jp\n");
                 fwrite($fp, "Reply-To: okada@abc.ac.jp\n");
                 fwrite($fp, "To: ". $mailaddress . "\n");
                 fwrite($fp, "Subject: " . $subject ."\n");
                 fwrite($fp, "Mime-Version: 1.0\n");
                 fwrite($fp, "Content-Type: text/plain; charset=ISO-2022-JP\n\n");
                 fwrite($fp, $msg . "\n");
                 pclose($fp);
                 //一度メールを送ったら、2回目のメールは出さないようにする
                 exec("/bin/echo 1 > /home/okada/log/pinglog.flag");
         }
 ?>

その後

 $ chmod a+x icmpcheckmail.php

で実行権を与える

/home/okada/log/pinglog.flagは0のときは正常1:のときはなんらかのエラー時で、このファイルに1があるときは、メール送信しない。初めてエラーになるときは0なのでメール送信し、その後1を立てるので、同じ内容を複数回メール送信しないようにしている。
 
--------------------------------------------------------------------------------
RIGHT:[[元ページ:https://wwwism.dyndns.org/hp/phpshell.htm]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS