OSDN Git Service

Merge branch 'php7' into branch_r1_5
[pukiwiki/pukiwiki.git] / plugin / dump.inc.php
index 3346507..d3ad3de 100644 (file)
@@ -1,33 +1,23 @@
 <?php
-/////////////////////////////////////////////////
-// $Id: dump.inc.php,v 1.33 2004/12/25 00:36:21 henoheno Exp $
+// $Id: dump.inc.php,v 1.41 2007/11/03 15:17:52 henoheno Exp $
+// Copyright (C)
+//   2004-2007 PukiWiki Developers Team
+//   2004      teanan / Interfair Laboratory
+// License: GPL v2 or (at your option) any later version
+//
+// Remote dump / restore plugin
 // Originated as tarfile.inc.php by teanan / Interfair Laboratory 2004.
 
-// [¹¹¿·ÍúÎò]
-// 2004-09-21 version 0.0 [»ÃÄêÈÇ]
-// ¡¦¤È¤ê¤¢¤¨¤º wiki ¥Ç¥£¥ì¥¯¥È¥ê¤¬tar.gz¤Ç¼è¤ê½Ð¤»¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
-// 2004-09-22 version 0.1 [»ÃÄêÈÇ]
-// ¡¦¡Átar.gz/¡Á.tar¤ÎÁªÂò¤ËÂбþ
-// ¡¦attach,backup¥Ç¥£¥ì¥¯¥È¥ê¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¤ËÂбþ
-// ¡¦¥Õ¥¡¥¤¥ë̾¤ò¥Ú¡¼¥¸Ì¾¤ËÊÑ´¹¤¹¤ëµ¡Ç½¤òÄɲÃ(wiki/attach/backup)
-// ¡¦¥Õ¥¡¥¤¥ë°ìÍ÷¤Î¼èÆÀÊýË¡¤òÊѹ¹(glob¢ªopendir)
-// 2004-09-22 version 0.2
-// ¡¦¥Õ¥¡¥¤¥ë¤Î¥¢¥Ã¥×¥í¡¼¥É(¥ê¥¹¥È¥¢)¤ËÂбþ(tar/tar.gz)
-//   (ÂоݤϠwiki,attach¥Ç¥£¥ì¥¯¥È¥ê¤Î¤ß)
-// 2004-09-22 version 1.0
-// ¡¦LongLink(100¥Ð¥¤¥È¤òĶ¤¨¤¿¥Õ¥¡¥¤¥ë̾)¤ËÂбþ
-// ¡¦¥ê¥¹¥È¥¢»þ¥Õ¥¡¥¤¥ë¤Î¹¹¿·»þ¹ï¤ò¸µ¤ËÌ᤹¤è¤¦¤Ë½¤Àµ
-
 /////////////////////////////////////////////////
 // User defines
 
 // Allow using resture function
 define('PLUGIN_DUMP_ALLOW_RESTORE', FALSE); // FALSE, TRUE
 
-// ¥Ú¡¼¥¸Ì¾¤ò¥Ç¥£¥ì¥¯¥È¥ê¹½Â¤¤ËÊÑ´¹¤¹¤ëºÝ¤Îʸ»ú¥³¡¼¥É (for mbstring)
+// ページ名をディレクトリ構造に変換する際の文字コード (for mbstring)
 define('PLUGIN_DUMP_FILENAME_ENCORDING', 'SJIS');
 
-// ºÇÂ祢¥Ã¥×¥í¡¼¥É¥µ¥¤¥º
+// æ\9c\80大ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\82µã\82¤ã\82º
 define('PLUGIN_DUMP_MAX_FILESIZE', 1024); // Kbyte
 
 /////////////////////////////////////////////////
@@ -53,11 +43,13 @@ $_STORAGE['BACKUP_DIR']['extract_filter'] =  '^' . preg_quote(BACKUP_DIR, '/') .
 
 
 /////////////////////////////////////////////////
-// ¥×¥é¥°¥¤¥óËÜÂÎ
+// プラグイン本体
 function plugin_dump_action()
 {
        global $vars;
 
+       if (PKWK_READONLY) die_message('PKWK_READONLY prohibits this');
+
        $pass = isset($_POST['pass']) ? $_POST['pass'] : NULL;
        $act  = isset($vars['act'])   ? $vars['act']   : NULL;
 
@@ -65,7 +57,7 @@ function plugin_dump_action()
 
        if ($pass !== NULL) {
                if (! pkwk_login($pass)) {
-                       $body = "<p><strong>¥Ñ¥¹¥ï¡¼¥É¤¬°ã¤¤¤Þ¤¹¡£</strong></p>\n";
+                       $body = "<p><strong>パスワードが違います。</strong></p>\n";
                } else {
                        switch($act){
                        case PLUGIN_DUMP_DUMP:
@@ -74,9 +66,9 @@ function plugin_dump_action()
                        case PLUGIN_DUMP_RESTORE:
                                $retcode = plugin_dump_upload();
                                if ($retcode['code'] == TRUE) {
-                                       $msg = '¥¢¥Ã¥×¥í¡¼¥É¤¬´°Î»¤·¤Þ¤·¤¿';
+                                       $msg = 'アップロードが完了しました';
                                } else {
-                                       $msg = '¥¢¥Ã¥×¥í¡¼¥É¤Ë¼ºÇÔ¤·¤Þ¤·¤¿';
+                                       $msg = 'アップロードに失敗しました';
                                }
                                $body .= $retcode['msg'];
                                return array('msg' => $msg, 'body' => $body);
@@ -85,7 +77,7 @@ function plugin_dump_action()
                }
        }
 
-       // ÆþÎÏ¥Õ¥©¡¼¥à¤òɽ¼¨
+       // 入力フォームを表示
        $body .= plugin_dump_disp_form();
 
        $msg = '';
@@ -99,18 +91,18 @@ function plugin_dump_action()
 }
 
 /////////////////////////////////////////////////
-// ¥Õ¥¡¥¤¥ë¤Î¥À¥¦¥ó¥í¡¼¥É
+// ファイルのダウンロード
 function plugin_dump_download()
 {
        global $vars, $_STORAGE;
 
-       // ¥¢¡¼¥«¥¤¥Ö¤Î¼ïÎà
+       // アーカイブの種類
        $arc_kind = ($vars['pcmd'] == 'tar') ? 'tar' : 'tgz';
 
-       // ¥Ú¡¼¥¸Ì¾¤ËÊÑ´¹¤¹¤ë
+       // ページ名に変換する
        $namedecode = isset($vars['namedecode']) ? TRUE : FALSE;
 
-       // ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¥£¥ì¥¯¥È¥ê
+       // バックアップディレクトリ
        $bk_wiki   = isset($vars['bk_wiki'])   ? TRUE : FALSE;
        $bk_attach = isset($vars['bk_attach']) ? TRUE : FALSE;
        $bk_backup = isset($vars['bk_backup']) ? TRUE : FALSE;
@@ -118,7 +110,7 @@ function plugin_dump_download()
        $filecount = 0;
        $tar = new tarlib();
        $tar->create(CACHE_DIR, $arc_kind) or
-               die_message('¥Æ¥ó¥Ý¥é¥ê¥Õ¥¡¥¤¥ë¤ÎÀ¸À®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£');
+               die_message('テンポラリファイルの生成に失敗しました。');
 
        if ($bk_wiki)   $filecount += $tar->add_dir(DATA_DIR,   $_STORAGE['DATA_DIR']['add_filter'],   $namedecode);
        if ($bk_attach) $filecount += $tar->add_dir(UPLOAD_DIR, $_STORAGE['UPLOAD_DIR']['add_filter'], $namedecode);
@@ -128,17 +120,17 @@ function plugin_dump_download()
 
        if ($filecount === 0) {
                @unlink($tar->filename);
-               return '<p><strong>¥Õ¥¡¥¤¥ë¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£</strong></p>';
+               return '<p><strong>ファイルがみつかりませんでした。</strong></p>';
        } else {
-               // ¥À¥¦¥ó¥í¡¼¥É
+               // ダウンロード
                download_tarfile($tar->filename, $arc_kind);
                @unlink($tar->filename);
-               exit;   // Àµ¾ï½ªÎ»
+               exit;   // 正常終了
        }
 }
 
 /////////////////////////////////////////////////
-// ¥Õ¥¡¥¤¥ë¤Î¥¢¥Ã¥×¥í¡¼¥É
+// ファイルのアップロード
 function plugin_dump_upload()
 {
        global $vars, $_STORAGE;
@@ -164,12 +156,12 @@ function plugin_dump_upload()
                die_message('Max file size exceeded: ' . PLUGIN_DUMP_MAX_FILESIZE . 'KB');
 
        // Create a temporary tar file
-       $uploadfile = tempnam(CACHE_DIR, 'tarlib_uploaded_');
+       $uploadfile = tempnam(realpath(CACHE_DIR), 'tarlib_uploaded_');
        $tar = new tarlib();
        if(! move_uploaded_file($_FILES['upload_file']['tmp_name'], $uploadfile) ||
           ! $tar->open($uploadfile, $arc_kind)) {
                @unlink($uploadfile);
-               die_message('¥Õ¥¡¥¤¥ë¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+               die_message('ファイルがみつかりませんでした。');
        }
 
        $pattern = "(({$_STORAGE['DATA_DIR']['extract_filter']})|" .
@@ -178,10 +170,10 @@ function plugin_dump_upload()
        $files = $tar->extract($pattern);
        if (empty($files)) {
                @unlink($uploadfile);
-               return array('code' => FALSE, 'msg' => '<p>Ÿ³«¤Ç¤­¤ë¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£</p>');
+               return array('code' => FALSE, 'msg' => '<p>展開できるファイルがありませんでした。</p>');
        }
 
-       $msg  = '<p><strong>Ÿ³«¤·¤¿¥Õ¥¡¥¤¥ë°ìÍ÷</strong><ul>';
+       $msg  = '<p><strong>展開したファイル一覧</strong><ul>';
        foreach($files as $name) {
                $msg .= "<li>$name</li>\n";
        }
@@ -194,7 +186,7 @@ function plugin_dump_upload()
 }
 
 /////////////////////////////////////////////////
-// tar¥Õ¥¡¥¤¥ë¤Î¥À¥¦¥ó¥í¡¼¥É
+// tarファイルのダウンロード
 function download_tarfile($tempnam, $arc_kind)
 {
        $size = filesize($tempnam);
@@ -215,7 +207,7 @@ function download_tarfile($tempnam, $arc_kind)
 }
 
 /////////////////////////////////////////////////
-// ÆþÎÏ¥Õ¥©¡¼¥à¤òɽ¼¨
+// 入力フォームを表示
 function plugin_dump_disp_form()
 {
        global $script, $defaultpage;
@@ -227,30 +219,37 @@ function plugin_dump_disp_form()
        $data = <<<EOD
 <span class="small">
 </span>
-<h3>¥Ç¡¼¥¿¤Î¥À¥¦¥ó¥í¡¼¥É</h3>
+<h3>データのダウンロード</h3>
 <form action="$script" method="post">
  <div>
   <input type="hidden" name="cmd"  value="dump" />
   <input type="hidden" name="page" value="$defaultpage" />
   <input type="hidden" name="act"  value="$act_down" />
 
-<p><strong>¥¢¡¼¥«¥¤¥Ö¤Î·Á¼°</strong>
+<p><strong>アーカイブの形式</strong>
 <br />
-  <input type="radio" name="pcmd" value="tgz" checked="checked" /> ¡Á.tar.gz ·Á¼°<br />
-  <input type="radio" name="pcmd" value="tar" /> ¡Á.tar ·Á¼°
+  <input type="radio" name="pcmd" id="_p_dump_tgz" value="tgz" checked="checked" />
+  <label for="_p_dump_tgz"> ~.tar.gz 形式</label><br />
+  <input type="radio" name="pcmd" id="_p_dump_tar" value="tar" />
+  <label for="_p_dump_tar">~.tar 形式</label>
 </p>
-<p><strong>¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¥£¥ì¥¯¥È¥ê</strong>
+<p><strong>バックアップディレクトリ</strong>
 <br />
-  <input type="checkbox" name="bk_wiki" checked="checked" /> wiki<br />
-  <input type="checkbox" name="bk_attach" /> attach<br />
-  <input type="checkbox" name="bk_backup" /> backup
+  <input type="checkbox" name="bk_wiki" id="_p_dump_d_wiki" checked="checked" />
+  <label for="_p_dump_d_wiki">wiki</label><br />
+  <input type="checkbox" name="bk_attach" id="_p_dump_d_attach" />
+  <label for="_p_dump_d_attach">attach</label><br />
+  <input type="checkbox" name="bk_backup" id="_p_dump_d_backup" />
+  <label for="_p_dump_d_backup">backup</label><br />
 </p>
-<p><strong>¥ª¥×¥·¥ç¥ó</strong>
+<p><strong>オプション</strong>
 <br />
-  <input type="checkbox" name="namedecode" /> ¥¨¥ó¥³¡¼¥É¤µ¤ì¤Æ¤¤¤ë¥Ú¡¼¥¸Ì¾¤ò¥Ç¥£¥ì¥¯¥È¥ê³¬ÁؤĤ­¤Î¥Õ¥¡¥¤¥ë¤Ë¥Ç¥³¡¼¥É (¢¨¥ê¥¹¥È¥¢¤Ë»È¤¦¤³¤È¤Ï¤Ç¤­¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£¤Þ¤¿¡¢°ìÉô¤Îʸ»ú¤Ï '_' ¤ËÃÖ´¹¤µ¤ì¤Þ¤¹)<br />
+  <input type="checkbox" name="namedecode" id="_p_dump_namedecode" />
+  <label for="_p_dump_namedecode">エンコードされているページ名をディレクトリ階層つきのファイルにデコード
+  (※リストアに使うことはできなくなります。また、一部の文字は '_' に置換されます)</label><br />
 </p>
-<p><strong>´ÉÍý¼Ô¥Ñ¥¹¥ï¡¼¥É</strong>
-  <input type="password" name="pass" size="12" />
+<p><label for="_p_dump_adminpass_dump"><strong>管理者パスワード</strong></label>
+  <input type="password" name="pass" id="_p_dump_adminpass_dump" size="12" />
   <input type="submit"   name="ok"   value="OK" />
 </p>
  </div>
@@ -259,20 +258,21 @@ EOD;
 
        if(PLUGIN_DUMP_ALLOW_RESTORE) {
                $data .= <<<EOD
-<h3>¥Ç¡¼¥¿¤Î¥ê¥¹¥È¥¢ (*.tar, *.tar.gz)</h3>
+<h3>ã\83\87ã\83¼ã\82¿ã\81®ã\83ªã\82¹ã\83\88ã\82¢ (*.tar, *.tar.gz)</h3>
 <form enctype="multipart/form-data" action="$script" method="post">
  <div>
   <input type="hidden" name="cmd"  value="dump" />
   <input type="hidden" name="page" value="$defaultpage" />
   <input type="hidden" name="act"  value="$act_up" />
-<p><strong>[½ÅÍ×] Æ±¤¸Ì¾Á°¤Î¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤Ï¾å½ñ¤­¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢½½Ê¬¤´Ãí°Õ¤¯¤À¤µ¤¤¡£</strong></p>
+<p><strong>[重要] 同じ名前のデータファイルは上書きされますので、十分ご注意ください。</strong></p>
 <p><span class="small">
-¥¢¥Ã¥×¥í¡¼¥É²Äǽ¤ÊºÇÂç¥Õ¥¡¥¤¥ë¥µ¥¤¥º¤Ï¡¢$maxsize KByte ¤Þ¤Ç¤Ç¤¹¡£<br />
+アップロード可能な最大ファイルサイズは、$maxsize KByte までです。<br />
 </span>
-  ¥Õ¥¡¥¤¥ë: <input type="file" name="upload_file" size="40" />
+  <label for="_p_dump_upload_file">ファイル:</label>
+  <input type="file" name="upload_file" id="_p_dump_upload_file" size="40" />
 </p>
-<p><strong>´ÉÍý¼Ô¥Ñ¥¹¥ï¡¼¥É</strong>
-  <input type="password" name="pass" size="12" />
+<p><label for="_p_dump_adminpass_restore"><strong>管理者パスワード</strong></label>
+  <input type="password" name="pass" id="_p_dump_adminpass_restore" size="12" />
   <input type="submit"   name="ok"   value="OK" />
 </p>
  </div>
@@ -287,31 +287,31 @@ EOD;
 // tarlib: a class library for tar file creation and expansion
 
 // Tar related definition
-define('TARLIB_HDR_LEN',           512);       // ¥Ø¥Ã¥À¤ÎÂ礭¤µ
-define('TARLIB_BLK_LEN',           512);       // Ã±°Ì¥Ö¥í¥Ã¥¯Ä¹¤µ
-define('TARLIB_HDR_NAME_OFFSET',     0);       // ¥Õ¥¡¥¤¥ë̾¤Î¥ª¥Õ¥»¥Ã¥È
-define('TARLIB_HDR_NAME_LEN',      100);       // ¥Õ¥¡¥¤¥ë̾¤ÎºÇÂ獵
-define('TARLIB_HDR_MODE_OFFSET',   100);       // mode¤Ø¤Î¥ª¥Õ¥»¥Ã¥È
-define('TARLIB_HDR_UID_OFFSET',    108);       // uid¤Ø¤Î¥ª¥Õ¥»¥Ã¥È
-define('TARLIB_HDR_GID_OFFSET',    116);       // gid¤Ø¤Î¥ª¥Õ¥»¥Ã¥È
-define('TARLIB_HDR_SIZE_OFFSET',   124);       // ¥µ¥¤¥º¤Ø¤Î¥ª¥Õ¥»¥Ã¥È
-define('TARLIB_HDR_SIZE_LEN',       12);       // ¥µ¥¤¥º¤ÎŤµ
-define('TARLIB_HDR_MTIME_OFFSET',  136);       // ºÇ½ª¹¹¿·»þ¹ï¤Î¥ª¥Õ¥»¥Ã¥È
-define('TARLIB_HDR_MTIME_LEN',      12);       // ºÇ½ª¹¹¿·»þ¹ï¤ÎŤµ
-define('TARLIB_HDR_CHKSUM_OFFSET', 148);       // ¥Á¥§¥Ã¥¯¥µ¥à¤Î¥ª¥Õ¥»¥Ã¥È
-define('TARLIB_HDR_CHKSUM_LEN',      8);       // ¥Á¥§¥Ã¥¯¥µ¥à¤ÎŤµ
-define('TARLIB_HDR_TYPE_OFFSET',   156);       // ¥Õ¥¡¥¤¥ë¥¿¥¤¥×¤Ø¤Î¥ª¥Õ¥»¥Ã¥È
+define('TARLIB_HDR_LEN',           512);       // ヘッダの大きさ
+define('TARLIB_BLK_LEN',           512);       // 単位ブロック長さ
+define('TARLIB_HDR_NAME_OFFSET',     0);       // ファイル名のオフセット
+define('TARLIB_HDR_NAME_LEN',      100);       // ファイル名の最大長さ
+define('TARLIB_HDR_MODE_OFFSET',   100);       // modeへのオフセット
+define('TARLIB_HDR_UID_OFFSET',    108);       // uidへのオフセット
+define('TARLIB_HDR_GID_OFFSET',    116);       // gidへのオフセット
+define('TARLIB_HDR_SIZE_OFFSET',   124);       // サイズへのオフセット
+define('TARLIB_HDR_SIZE_LEN',       12);       // サイズの長さ
+define('TARLIB_HDR_MTIME_OFFSET',  136);       // 最終更新時刻のオフセット
+define('TARLIB_HDR_MTIME_LEN',      12);       // 最終更新時刻の長さ
+define('TARLIB_HDR_CHKSUM_OFFSET', 148);       // チェックサムのオフセット
+define('TARLIB_HDR_CHKSUM_LEN',      8);       // チェックサムの長さ
+define('TARLIB_HDR_TYPE_OFFSET',   156);       // ファイルタイプへのオフセット
 
 // Status
-define('TARLIB_STATUS_INIT',    0);            // ½é´ü¾õÂÖ
-define('TARLIB_STATUS_OPEN',   10);            // Æɤ߼è¤ê
-define('TARLIB_STATUS_CREATE', 20);            // ½ñ¤­¹þ¤ß
+define('TARLIB_STATUS_INIT',    0);            // 初期状態
+define('TARLIB_STATUS_OPEN',   10);            // 読み取り
+define('TARLIB_STATUS_CREATE', 20);            // 書き込み
 
-define('TARLIB_DATA_MODE',      '100666 ');    // ¥Õ¥¡¥¤¥ë¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó
+define('TARLIB_DATA_MODE',      '100666 ');    // ファイルパーミッション
 define('TARLIB_DATA_UGID',      '000000 ');    // uid / gid
 define('TARLIB_DATA_CHKBLANKS', '        ');
 
-// GNU³ÈÄ¥»ÅÍÍ(¥í¥ó¥°¥Õ¥¡¥¤¥ë̾Âбþ)
+// GNU拡張仕様(ロングファイル名対応)
 define('TARLIB_DATA_LONGLINK', '././@LongLink');
 
 // Type flag
@@ -330,7 +330,7 @@ class tarlib
        var $arc_kind;
        var $dummydata;
 
-       // ¥³¥ó¥¹¥È¥é¥¯¥¿
+       // ã\82³ã\83³ã\82¹ã\83\88ã\83©ã\82¯ã\82¿
        function tarlib() {
                $this->filename = '';
                $this->fp       = FALSE;
@@ -339,13 +339,13 @@ class tarlib
        }
        
        ////////////////////////////////////////////////////////////
-       // ´Ø¿ô  : tar¥Õ¥¡¥¤¥ë¤òºîÀ®¤¹¤ë
-       // °ú¿ô  : tar¥Õ¥¡¥¤¥ë¤òºîÀ®¤¹¤ë¥Ñ¥¹
-       // ÊÖ¤êÃÍ: TRUE .. À®¸ù , FALSE .. ¼ºÇÔ
+       // 関数  : tarファイルを作成する
+       // å¼\95æ\95°  : tarã\83\95ã\82¡ã\82¤ã\83«ã\82\92ä½\9cæ\88\90ã\81\99ã\82\8bã\83\91ã\82¹
+       // 返り値: TRUE .. 成功 , FALSE .. 失敗
        ////////////////////////////////////////////////////////////
        function create($tempdir, $kind = 'tgz')
        {
-               $tempnam = tempnam($tempdir, 'tarlib_create_');
+               $tempnam = tempnam(realpath($tempdir), 'tarlib_create_');
                if ($tempnam === FALSE) return FALSE;
 
                if ($kind == 'tgz') {
@@ -369,11 +369,11 @@ class tarlib
        }
 
        ////////////////////////////////////////////////////////////
-       // ´Ø¿ô  : tar¥Õ¥¡¥¤¥ë¤Ë¥Ç¥£¥ì¥¯¥È¥ê¤òÄɲ乤ë
-       // °ú¿ô  : $dir    .. ¥Ç¥£¥ì¥¯¥È¥ê̾
-       //         $mask   .. Äɲ乤ë¥Õ¥¡¥¤¥ë(Àµµ¬É½¸½)
-       //         $decode .. ¥Ú¡¼¥¸Ì¾¤ÎÊÑ´¹¤ò¤¹¤ë¤«
-       // ÊÖ¤êÃÍ: ºîÀ®¤·¤¿¥Õ¥¡¥¤¥ë¿ô
+       // 関数  : tarファイルにディレクトリを追加する
+       // 引数  : $dir    .. ディレクトリ名
+       //         $mask   .. 追加するファイル(正規表現)
+       //         $decode .. ページ名の変換をするか
+       // 返り値: 作成したファイル数
        ////////////////////////////////////////////////////////////
        function add_dir($dir, $mask, $decode = FALSE)
        {
@@ -384,80 +384,80 @@ class tarlib
 
                unset($files);
 
-               //  »ØÄꤵ¤ì¤¿¥Ñ¥¹¤Î¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È¤ò¼èÆÀ¤¹¤ë
+               //  指定されたパスのファイルのリストを取得する
                $dp = @opendir($dir);
                if($dp === FALSE) {
                        @unlink($this->filename);
                        die_message($dir . ' is not found or not readable.');
                }
-
-               while ($filename = readdir($dp)) {
-                       if (preg_match("/$mask/", $filename))
+               while (($filename = readdir($dp)) !== FALSE) {
+                       if (preg_match('/' . $mask . '/', $filename)) {
                                $files[] = $dir . $filename;
+                       }
                }
                closedir($dp);
                
-               sort($files);
+               sort($files, SORT_STRING);
 
                $matches = array();
                foreach($files as $name)
                {
-                       // Tar¤Ë³ÊǼ¤¹¤ë¥Õ¥¡¥¤¥ë̾¤òdecode
+                       // Tarに格納するファイル名をdecode
                        if ($decode === FALSE) {
                                $filename = $name;
                        } else {
                                $dirname  = dirname(trim($name)) . '/';
                                $filename = basename(trim($name));
                                if (preg_match("/^((?:[0-9A-F]{2})+)_((?:[0-9A-F]{2})+)/", $filename, $matches)) {
-                                       // attach¥Õ¥¡¥¤¥ë̾
+                                       // attachファイル名
                                        $filename = decode($matches[1]) . '/' . decode($matches[2]);
                                } else {
                                        $pattern = '^((?:[0-9A-F]{2})+)((\.txt|\.gz)*)$';
                                        if (preg_match("/$pattern/", $filename, $matches)) {
                                                $filename = decode($matches[1]) . $matches[2];
 
-                                               // ´í¤Ê¤¤¥³¡¼¥É¤ÏÃÖ´¹¤·¤Æ¤ª¤¯
+                                               // 危ないコードは置換しておく
                                                $filename = str_replace(':',  '_', $filename);
                                                $filename = str_replace('\\', '_', $filename);
                                        }
                                }
                                $filename = $dirname . $filename;
-                               // ¥Õ¥¡¥¤¥ë̾¤Îʸ»ú¥³¡¼¥É¤òÊÑ´¹
+                               // ファイル名の文字コードを変換
                                if (function_exists('mb_convert_encoding'))
                                        $filename = mb_convert_encoding($filename, PLUGIN_DUMP_FILENAME_ENCORDING);
                        }
 
-                       // ºÇ½ª¹¹¿·»þ¹ï
+                       // 最終更新時刻
                        $mtime = filemtime($name);
 
-                       // ¥Õ¥¡¥¤¥ë̾Ĺ¤Î¥Á¥§¥Ã¥¯
+                       // ã\83\95ã\82¡ã\82¤ã\83«å\90\8dé\95·ã\81®ã\83\81ã\82§ã\83\83ã\82¯
                        if (strlen($filename) > TARLIB_HDR_NAME_LEN) {
-                               // LongLinkÂбþ
+                               // LongLink対応
                                $size = strlen($filename);
-                               // LonkLink¥Ø¥Ã¥ÀÀ¸À®
+                               // LonkLinkヘッダ生成
                                $tar_data = $this->_make_header(TARLIB_DATA_LONGLINK, $size, $mtime, TARLIB_HDR_LINK);
-                               // ¥Õ¥¡¥¤¥ë½ÐÎÏ
+                               // ファイル出力
                                $this->_write_data(join('', $tar_data), $filename, $size);
                        }
 
-                       // ¥Õ¥¡¥¤¥ë¥µ¥¤¥º¤ò¼èÆÀ
+                       // ファイルサイズを取得
                        $size = filesize($name);
-                       if ($size == FALSE) {
+                       if ($size === FALSE) {
                                @unlink($this->filename);
                                die_message($name . ' is not found or not readable.');
                        }
 
-                       // ¥Ø¥Ã¥ÀÀ¸À®
+                       // ヘッダ生成
                        $tar_data = $this->_make_header($filename, $size, $mtime, TARLIB_HDR_FILE);
 
-                       // ¥Õ¥¡¥¤¥ë¥Ç¡¼¥¿¤Î¼èÆÀ
+                       // ファイルデータの取得
                        $fpr = @fopen($name , 'rb');
                        flock($fpr, LOCK_SH);
                        $data = fread($fpr, $size);
                        flock($fpr, LOCK_UN);
                        fclose( $fpr );
 
-                       // ¥Õ¥¡¥¤¥ë½ÐÎÏ
+                       // ファイル出力
                        $this->_write_data(join('', $tar_data), $data, $size);
                        ++$retvalue;
                }
@@ -465,23 +465,23 @@ class tarlib
        }
        
        ////////////////////////////////////////////////////////////
-       // ´Ø¿ô  : tar¤Î¥Ø¥Ã¥À¾ðÊó¤òÀ¸À®¤¹¤ë (add)
-       // °ú¿ô  : $filename .. ¥Õ¥¡¥¤¥ë̾
-       //         $size     .. ¥Ç¡¼¥¿¥µ¥¤¥º
-       //         $mtime    .. ºÇ½ª¹¹¿·Æü
+       // 関数  : tarのヘッダ情報を生成する (add)
+       // 引数  : $filename .. ファイル名
+       //         $size     .. ã\83\87ã\83¼ã\82¿ã\82µã\82¤ã\82º
+       //         $mtime    .. 最終更新日
        //         $typeflag .. TypeFlag (file/link)
-       // Ìá¤êÃÍ: tar¥Ø¥Ã¥À¾ðÊó
+       // 戻り値: tarヘッダ情報
        ////////////////////////////////////////////////////////////
        function _make_header($filename, $size, $mtime, $typeflag)
        {
                $tar_data = array_fill(0, TARLIB_HDR_LEN, "\0");
                
-               // ¥Õ¥¡¥¤¥ë̾¤òÊݸ
+               // ファイル名を保存
                for($i = 0; $i < strlen($filename); $i++ ) {
                        if ($i < TARLIB_HDR_NAME_LEN) {
                                $tar_data[$i + TARLIB_HDR_NAME_OFFSET] = $filename{$i};
                        } else {
-                               break;  // ¥Õ¥¡¥¤¥ë̾¤¬Ä¹¤¹¤®
+                               break;  // ファイル名が長すぎ
                        }
                }
 
@@ -498,28 +498,28 @@ class tarlib
                        $tar_data[$i + TARLIB_HDR_GID_OFFSET] = $ugid{$i};
                }
 
-               // ¥µ¥¤¥º
+               // ã\82µã\82¤ã\82º
                $strsize = sprintf('%11o', $size);
                for($i = 0; $i < strlen($strsize); $i++ ) {
                        $tar_data[$i + TARLIB_HDR_SIZE_OFFSET] = $strsize{$i};
                }
 
-               // ºÇ½ª¹¹¿·»þ¹ï
+               // 最終更新時刻
                $strmtime = sprintf('%o', $mtime);
                for($i = 0; $i < strlen($strmtime); $i++ ) {
                        $tar_data[$i + TARLIB_HDR_MTIME_OFFSET] = $strmtime{$i};
                }
 
-               // ¥Á¥§¥Ã¥¯¥µ¥à·×»»ÍѤΥ֥é¥ó¥¯¤òÀßÄê
+               // チェックサム計算用のブランクを設定
                $chkblanks = TARLIB_DATA_CHKBLANKS;
                for($i = 0; $i < strlen($chkblanks); $i++ ) {
                        $tar_data[$i + TARLIB_HDR_CHKSUM_OFFSET] = $chkblanks{$i};
                }
 
-               // ¥¿¥¤¥×¥Õ¥é¥°
+               // ã\82¿ã\82¤ã\83\97ã\83\95ã\83©ã\82°
                $tar_data[TARLIB_HDR_TYPE_OFFSET] = $typeflag;
 
-               // ¥Á¥§¥Ã¥¯¥µ¥à¤Î·×»»
+               // チェックサムの計算
                $sum = 0;
                for($i = 0; $i < TARLIB_BLK_LEN; $i++ ) {
                        $sum += 0xff & ord($tar_data[$i]);
@@ -533,11 +533,11 @@ class tarlib
        }
        
        ////////////////////////////////////////////////////////////
-       // ´Ø¿ô  : tar¥Ç¡¼¥¿¤Î¥Õ¥¡¥¤¥ë½ÐÎÏ (add)
-       // °ú¿ô  : $header .. tar¥Ø¥Ã¥À¾ðÊó
-       //         $body   .. tar¥Ç¡¼¥¿
-       //         $size   .. ¥Ç¡¼¥¿¥µ¥¤¥º
-       // Ìá¤êÃÍ: ¤Ê¤·
+       // 関数  : tarデータのファイル出力 (add)
+       // 引数  : $header .. tarヘッダ情報
+       //         $body   .. tarã\83\87ã\83¼ã\82¿
+       //         $size   .. ã\83\87ã\83¼ã\82¿ã\82µã\82¤ã\82º
+       // 戻り値: なし
        ////////////////////////////////////////////////////////////
        function _write_data($header, $body, $size)
        {
@@ -555,9 +555,9 @@ class tarlib
        }
 
        ////////////////////////////////////////////////////////////
-       // ´Ø¿ô  : tar¥Õ¥¡¥¤¥ë¤ò³«¤¯
-       // °ú¿ô  : tar¥Õ¥¡¥¤¥ë̾
-       // ÊÖ¤êÃÍ: TRUE .. À®¸ù , FALSE .. ¼ºÇÔ
+       // 関数  : tarファイルを開く
+       // 引数  : tarファイル名
+       // 返り値: TRUE .. 成功 , FALSE .. 失敗
        ////////////////////////////////////////////////////////////
        function open($name = '', $kind = 'tgz')
        {
@@ -583,10 +583,10 @@ class tarlib
        }
 
        ////////////////////////////////////////////////////////////
-       // ´Ø¿ô  : »ØÄꤷ¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Ëtar¥Õ¥¡¥¤¥ë¤òŸ³«¤¹¤ë
-       // °ú¿ô  : Å¸³«¤¹¤ë¥Õ¥¡¥¤¥ë¥Ñ¥¿¡¼¥ó(Àµµ¬É½¸½)
-       // ÊÖ¤êÃÍ: Å¸³«¤·¤¿¥Õ¥¡¥¤¥ë̾¤Î°ìÍ÷
-       // Êä­  : ARAI¤µ¤ó¤Îattach¥×¥é¥°¥¤¥ó¥Ñ¥Ã¥Á¤ò»²¹Í¤Ë¤·¤Þ¤·¤¿
+       // 関数  : 指定したディレクトリにtarファイルを展開する
+       // 引数  : 展開するファイルパターン(正規表現)
+       // 返り値: 展開したファイル名の一覧
+       // 補足  : ARAIさんのattachプラグインパッチを参考にしました
        ////////////////////////////////////////////////////////////
        function extract($pattern)
        {
@@ -599,10 +599,10 @@ class tarlib
                        $buff = fread($this->fp, TARLIB_HDR_LEN);
                        if (strlen($buff) != TARLIB_HDR_LEN) break;
 
-                       // ¥Õ¥¡¥¤¥ë̾
+                       // ファイル名
                        $name = '';
                        if ($longname != '') {
-                               $name     = $longname;  // LongLinkÂбþ
+                               $name     = $longname;  // LongLink対応
                                $longname = '';
                        } else {
                                for ($i = 0; $i < TARLIB_HDR_NAME_LEN; $i++ ) {
@@ -615,9 +615,9 @@ class tarlib
                        }
                        $name = trim($name);
 
-                       if ($name == '') break; // Å¸³«½ªÎ»
+                       if ($name == '') break; // 展開終了
 
-                       // ¥Á¥§¥Ã¥¯¥µ¥à¤ò¼èÆÀ¤·¤Ä¤Ä¡¢¥Ö¥é¥ó¥¯¤ËÃÖ´¹¤·¤Æ¤¤¤¯
+                       // チェックサムを取得しつつ、ブランクに置換していく
                        $checksum = '';
                        $chkblanks = TARLIB_DATA_CHKBLANKS;
                        for ($i = 0; $i < TARLIB_HDR_CHKSUM_LEN; $i++ ) {
@@ -641,17 +641,17 @@ class tarlib
                        list($size) = sscanf('0' . trim($size), '%i');
 
                        // ceil
-                       // ¥Ç¡¼¥¿¥Ö¥í¥Ã¥¯¤Ï512byte¤Ç¥Ñ¥Ç¥£¥ó¥°¤µ¤ì¤Æ¤¤¤ë
+                       // データブロックは512byteでパディングされている
                        $pdsz = ceil($size / TARLIB_BLK_LEN) * TARLIB_BLK_LEN;
 
-                       // ºÇ½ª¹¹¿·»þ¹ï
+                       // 最終更新時刻
                        $strmtime = '';
                        for ($i = 0; $i < TARLIB_HDR_MTIME_LEN; $i++ ) {
                                $strmtime .= $buff{$i + TARLIB_HDR_MTIME_OFFSET};
                        }
                        list($mtime) = sscanf('0' . trim($strmtime), '%i');
 
-                       // ¥¿¥¤¥×¥Õ¥é¥°
+                       // ã\82¿ã\82¤ã\83\97ã\83\95ã\83©ã\82°
 //                      $type = $buff{TARLIB_HDR_TYPE_OFFSET};
 
                        if ($name == TARLIB_DATA_LONGLINK) {
@@ -662,7 +662,7 @@ class tarlib
 //                     } else if ($type == 0 && preg_match("/$pattern/", $name) ) {
                                $buff = fread($this->fp, $pdsz);
 
-                               // ´û¤ËƱ¤¸¥Õ¥¡¥¤¥ë¤¬¤¢¤ë¾ì¹ç¤Ï¾å½ñ¤­¤µ¤ì¤ë
+                               // 既に同じファイルがある場合は上書きされる
                                $fpw = @fopen($name, 'wb');
                                if ($fpw !== FALSE) {
                                        flock($fpw, LOCK_EX);
@@ -675,7 +675,7 @@ class tarlib
                                        $files[] = $name;
                                }
                        } else {
-                               // ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿¤ò¿Ê¤á¤ë
+                               // ファイルポインタを進める
                                @fseek($this->fp, $pdsz, SEEK_CUR);
                        }
                }
@@ -683,21 +683,21 @@ class tarlib
        }
 
        ////////////////////////////////////////////////////////////
-       // ´Ø¿ô  : tar¥Õ¥¡¥¤¥ë¤òÊĤ¸¤ë
-       // °ú¿ô  : ¤Ê¤·
-       // ÊÖ¤êÃÍ: ¤Ê¤·
+       // 関数  : tarファイルを閉じる
+       // 引数  : なし
+       // 返り値: なし
        ////////////////////////////////////////////////////////////
        function close()
        {
                if ($this->status == TARLIB_STATUS_CREATE) {
-                       // ¥Õ¥¡¥¤¥ë¤òÊĤ¸¤ë
+                       // ファイルを閉じる
                        if ($this->arc_kind == TARLIB_KIND_TGZ) {
-                               // ¥Ð¥¤¥Ê¥ê¡¼¥¼¥í¤ò1024¥Ð¥¤¥È½ÐÎÏ
+                               // バイナリーゼロを1024バイト出力
                                gzwrite($this->fp, $this->dummydata, TARLIB_HDR_LEN);
                                gzwrite($this->fp, $this->dummydata, TARLIB_HDR_LEN);
                                gzclose($this->fp);
                        } else {
-                               // ¥Ð¥¤¥Ê¥ê¡¼¥¼¥í¤ò1024¥Ð¥¤¥È½ÐÎÏ
+                               // バイナリーゼロを1024バイト出力
                                fwrite($this->fp, $this->dummydata, TARLIB_HDR_LEN);
                                fwrite($this->fp, $this->dummydata, TARLIB_HDR_LEN);
                                fclose($this->fp);