<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
		<id>https://wiki.nonip.net/index.php?action=history&amp;feed=atom&amp;title=Php%2F%E3%83%AD%E3%82%B0%E5%9C%A7%E7%B8%AE%E3%83%90%E3%83%83%E3%83%81</id>
		<title>Php/ログ圧縮バッチ - 変更履歴</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.nonip.net/index.php?action=history&amp;feed=atom&amp;title=Php%2F%E3%83%AD%E3%82%B0%E5%9C%A7%E7%B8%AE%E3%83%90%E3%83%83%E3%83%81"/>
		<link rel="alternate" type="text/html" href="https://wiki.nonip.net/index.php?title=Php/%E3%83%AD%E3%82%B0%E5%9C%A7%E7%B8%AE%E3%83%90%E3%83%83%E3%83%81&amp;action=history"/>
		<updated>2026-04-24T17:59:45Z</updated>
		<subtitle>このウィキのこのページに関する変更履歴</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>https://wiki.nonip.net/index.php?title=Php/%E3%83%AD%E3%82%B0%E5%9C%A7%E7%B8%AE%E3%83%90%E3%83%83%E3%83%81&amp;diff=188&amp;oldid=prev</id>
		<title>127.0.0.1: ページの作成:「crontab -e  5 0 * * * /usr/local/bin/php /home/linux/mnglog.php /home/linux/mnglog_conf.php  mnglog_conf.php  &lt;?php  $log_path_fmt_list = array();  $log_path_fmt_list[] =...」</title>
		<link rel="alternate" type="text/html" href="https://wiki.nonip.net/index.php?title=Php/%E3%83%AD%E3%82%B0%E5%9C%A7%E7%B8%AE%E3%83%90%E3%83%83%E3%83%81&amp;diff=188&amp;oldid=prev"/>
				<updated>2015-05-19T18:08:29Z</updated>
		
		<summary type="html">&lt;p&gt;ページの作成:「crontab -e  5 0 * * * /usr/local/bin/php /home/linux/mnglog.php /home/linux/mnglog_conf.php  mnglog_conf.php  &amp;lt;?php  $log_path_fmt_list = array();  $log_path_fmt_list[] =...」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;crontab -e&lt;br /&gt;
 5 0 * * * /usr/local/bin/php /home/linux/mnglog.php /home/linux/mnglog_conf.php&lt;br /&gt;
&lt;br /&gt;
mnglog_conf.php&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $log_path_fmt_list = array();&lt;br /&gt;
 $log_path_fmt_list[] = '/home/linux/test%s.log';&lt;br /&gt;
&lt;br /&gt;
mnglog.php&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 // ログ管理スクリプト&lt;br /&gt;
 // 圧縮日指定（本日より何日前&lt;br /&gt;
 $comp_before_day = 1;&lt;br /&gt;
 // 削除日指定（本日より何日前&lt;br /&gt;
 $del_before_day = 1 * 365;&lt;br /&gt;
 // 圧縮日offset指定(デフォルト0)(障害で処理されなかったことを考慮して指定日から3日前まで、&lt;br /&gt;
 $comp_offset_day = 3;&lt;br /&gt;
 // 削除日offset指定(デフォルト0)(障害で処理されなかったことを考慮して指定日から3日前まで、&lt;br /&gt;
 $del_offset_day = 3;&lt;br /&gt;
 // --------------------------------------------------------------------------------------------------&lt;br /&gt;
 echo '=============================== START '.date('Y/m/d H:i:s').&amp;quot; ===============================\n&amp;quot;;&lt;br /&gt;
 // 設定ファイルの読み込み&lt;br /&gt;
 if ($argc &amp;gt; 1) {&lt;br /&gt;
     $conf_path = $argv[1];&lt;br /&gt;
 } else {&lt;br /&gt;
     echo &amp;quot;config file does not specified\n&amp;quot;;&lt;br /&gt;
     echo '=============================== END '.date('Y/m/d H:i:s').&amp;quot;   ===============================\n&amp;quot;;&lt;br /&gt;
     exit;&lt;br /&gt;
 }&lt;br /&gt;
 echo &amp;quot;config file is {$conf_path}\n&amp;quot;;&lt;br /&gt;
 if (!file_exists($conf_path)) {&lt;br /&gt;
     echo &amp;quot;config file does not exists\n&amp;quot;;&lt;br /&gt;
     echo '=============================== END '.date('Y/m/d H:i:s').&amp;quot;   ===============================\n&amp;quot;;&lt;br /&gt;
     exit;&lt;br /&gt;
 }&lt;br /&gt;
 require_once($conf_path);&lt;br /&gt;
 // ログ管理クラスロード&lt;br /&gt;
 $m = new MnglogModel();&lt;br /&gt;
 // 対象ログパスリストをセット&lt;br /&gt;
 $m-&amp;gt;setLogPathFmtList($log_path_fmt_list);&lt;br /&gt;
 // 圧縮処理&lt;br /&gt;
 $m-&amp;gt;compExecByBeforeDay($comp_before_day, $comp_offset_day);&lt;br /&gt;
 // 削除処理&lt;br /&gt;
 $m-&amp;gt;delExecByBeforeDay($del_before_day, $del_offset_day);&lt;br /&gt;
 echo '=============================== END '.date('Y/m/d H:i:s').&amp;quot;   ===============================\n&amp;quot;;&lt;br /&gt;
 exit;&lt;br /&gt;
 /**&lt;br /&gt;
  * ログ管理モデルクラス&lt;br /&gt;
  */&lt;br /&gt;
 class MnglogModel&lt;br /&gt;
 {&lt;br /&gt;
     // 対象ログパスリスト&lt;br /&gt;
     private $_log_path_fmt_list = array();&lt;br /&gt;
     // 年月日フォーマットリスト&lt;br /&gt;
     private $_ymd_formats = array(&lt;br /&gt;
         'Ymd',&lt;br /&gt;
         'Y-m-d'&lt;br /&gt;
     );&lt;br /&gt;
     const COMP_CMD_FMT = 'gzip %s';&lt;br /&gt;
     const DEL_CMD_FMT =  'rm -fr %s';&lt;br /&gt;
     const LS_CMD_FMT =  'ls %s 2&amp;gt;&amp;amp;1';&lt;br /&gt;
     // 対象ログパスリスト&lt;br /&gt;
     public function setLogPathFmtList($log_path_fmt_list)&lt;br /&gt;
     {&lt;br /&gt;
         // 対象ログパスリスト&lt;br /&gt;
         $this-&amp;gt;_log_path_fmt_list = $log_path_fmt_list;&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * 圧縮処理&lt;br /&gt;
      *&lt;br /&gt;
      * @param  int  $before_day 今日から何日前&lt;br /&gt;
      * @param  int  $offset          前項目指定より何日前までを全て処理&lt;br /&gt;
      * @return void&lt;br /&gt;
      */&lt;br /&gt;
     public function compExecByBeforeDay($before_day, $offset = 0)&lt;br /&gt;
     {&lt;br /&gt;
         // 処理対象日付を計算&lt;br /&gt;
         $now_ts = time();&lt;br /&gt;
         // 圧縮日付取得&lt;br /&gt;
         $target_ts = $now_ts - 3600 * 24 * ($before_day + $offset);&lt;br /&gt;
 echo &amp;quot;compress target date is &amp;quot; . date('Ymd', $target_ts) . &amp;quot;\n&amp;quot;;&lt;br /&gt;
         &lt;br /&gt;
         // 対象ログパスリストを取得&lt;br /&gt;
         $log_path_list = $this-&amp;gt;_getTargetLoglist($target_ts);&lt;br /&gt;
         foreach ($log_path_list as $log_path) {&lt;br /&gt;
             // 圧縮&lt;br /&gt;
             $this-&amp;gt;_compCommandExec($log_path);&lt;br /&gt;
         }&lt;br /&gt;
         if ($offset &amp;gt; 0) {&lt;br /&gt;
             // offsetを1減らして再帰処理&lt;br /&gt;
             $f = __FUNCTION__;&lt;br /&gt;
             $this-&amp;gt;$f($before_day, $offset - 1);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * 削除処理&lt;br /&gt;
      *&lt;br /&gt;
      * @param  int  $before_day 今日から何日前&lt;br /&gt;
      * @return void&lt;br /&gt;
      */&lt;br /&gt;
     public function delExecByBeforeDay($before_day, $offset = 0)&lt;br /&gt;
     {&lt;br /&gt;
         // 処理対象日付を計算&lt;br /&gt;
         $now_ts = time();&lt;br /&gt;
         // 削除日付取得&lt;br /&gt;
         $target_ts = $now_ts - 3600 * 24 * ($before_day + $offset);&lt;br /&gt;
         $target_date = date('Ymd', $target_ts);&lt;br /&gt;
 echo &amp;quot;delete target date is &amp;quot; . date('Ymd', $target_ts) . &amp;quot;\n&amp;quot;;&lt;br /&gt;
         &lt;br /&gt;
         // 対象ログパスリストを取得&lt;br /&gt;
         $log_path_list = $this-&amp;gt;_getTargetLoglist($target_ts);&lt;br /&gt;
         foreach ($log_path_list as $log_path) {&lt;br /&gt;
             // 削除(.gz&lt;br /&gt;
             $this-&amp;gt;_delCommandExec($log_path . '.gz');&lt;br /&gt;
             // 削除(圧縮し忘れログ&lt;br /&gt;
             $this-&amp;gt;_delCommandExec($log_path);&lt;br /&gt;
         }&lt;br /&gt;
         if ($offset &amp;gt; 0) {&lt;br /&gt;
             // offsetを1減らして再帰処理&lt;br /&gt;
             $f = __FUNCTION__;&lt;br /&gt;
             $this-&amp;gt;$f($before_day, $offset - 1);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * 対象ログパスリストを取得&lt;br /&gt;
      */&lt;br /&gt;
     private function _getTargetLoglist($target_ts)&lt;br /&gt;
     {&lt;br /&gt;
         $log_paths = array();&lt;br /&gt;
         // 処理を行う&lt;br /&gt;
         foreach ($this-&amp;gt;_log_path_fmt_list as $log_path_fmt) {&lt;br /&gt;
             // 年月日フォーマット分だけループ&lt;br /&gt;
             foreach ($this-&amp;gt;_ymd_formats as $ymd_format) {&lt;br /&gt;
                 $target_date = date($ymd_format, $target_ts);&lt;br /&gt;
                 $log_paths[] = sprintf($log_path_fmt, $target_date);&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         return $log_paths;&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * 圧縮コマンド処理&lt;br /&gt;
      *&lt;br /&gt;
      * @param  string  $log_path   圧縮ファイルパス&lt;br /&gt;
      * @return void&lt;br /&gt;
      */&lt;br /&gt;
     private function _compCommandExec($log_path)&lt;br /&gt;
     {&lt;br /&gt;
         // 対象ファイルが存在しない時&lt;br /&gt;
         if ($this-&amp;gt;_checkFileExists($log_path) === FALSE) return FALSE;&lt;br /&gt;
         &lt;br /&gt;
         $cmd = sprintf(self::COMP_CMD_FMT, $log_path);&lt;br /&gt;
         shell_exec($cmd);&lt;br /&gt;
 echo $cmd.&amp;quot;\n&amp;quot;;&lt;br /&gt;
         return TRUE;&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * 削除コマンド処理&lt;br /&gt;
      *&lt;br /&gt;
      * @param  string  $log_path   削除ファイルパス&lt;br /&gt;
      * @return void&lt;br /&gt;
      */&lt;br /&gt;
     private function _delCommandExec($log_path)&lt;br /&gt;
     {&lt;br /&gt;
         // 対象ファイルが存在しない時&lt;br /&gt;
         if ($this-&amp;gt;_checkFileExists($log_path) === FALSE) return FALSE;&lt;br /&gt;
         &lt;br /&gt;
         $cmd = sprintf(self::DEL_CMD_FMT, $log_path);&lt;br /&gt;
         shell_exec($cmd);&lt;br /&gt;
 echo $cmd.&amp;quot;\n&amp;quot;;&lt;br /&gt;
         return TRUE;&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * ファイル存在チェック&lt;br /&gt;
      */&lt;br /&gt;
     private function _checkFileExists($path)&lt;br /&gt;
     {&lt;br /&gt;
         // 省略パターンを含む時&lt;br /&gt;
         if (strpos($path, &amp;quot;*&amp;quot;) !== FALSE) {&lt;br /&gt;
             // lsでチェック&lt;br /&gt;
             $cmd = sprintf(self::LS_CMD_FMT, $path);&lt;br /&gt;
             exec($cmd, $arr, $res);&lt;br /&gt;
             // ファイルが存在しない時&lt;br /&gt;
             if ($res == 2) {&lt;br /&gt;
                 return FALSE;&lt;br /&gt;
             }&lt;br /&gt;
         // 省略パターンを含まない時&lt;br /&gt;
         } else {&lt;br /&gt;
             if (!file_exists($path)) {&lt;br /&gt;
                 return FALSE;&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         // ファイルが存在する時&lt;br /&gt;
         return TRUE;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>127.0.0.1</name></author>	</entry>

	</feed>