From baf0300002830f89b22e132d85aa59950d536dd9 Mon Sep 17 00:00:00 2001 From: henoheno Date: Sat, 25 Sep 2004 19:29:23 +0900 Subject: [PATCH 1/1] mv tarfile.inc.php dump.inc.php; # to abstraction of dump and restore --- plugin/dump.inc.php | 30 +- plugin/tarfile.inc.php | 729 ------------------------------------------------- 2 files changed, 15 insertions(+), 744 deletions(-) delete mode 100644 plugin/tarfile.inc.php diff --git a/plugin/dump.inc.php b/plugin/dump.inc.php index 9177479..f6ee6d7 100644 --- a/plugin/dump.inc.php +++ b/plugin/dump.inc.php @@ -20,15 +20,15 @@ ///////////////////////////////////////////////// // ¥Õ¥¡¥¤¥ë̾¤ò¥Ú¡¼¥¸Ì¾¤Ë¤¹¤ëºÝ¤ÎÆüËܸì¤Îʸ»ú¥³¡¼¥É -define('PLUGIN_TARFILE_FILENAME_ENCORDING','SJIS'); +define('PLUGIN_DUMP_FILENAME_ENCORDING','SJIS'); // ºÇÂ祢¥Ã¥×¥í¡¼¥É¥µ¥¤¥º -define('PLUGIN_TARFILE_MAX_FILESIZE',1024); // Kbyte +define('PLUGIN_DUMP_MAX_FILESIZE',1024); // Kbyte ///////////////////////////////////////////////// // ³ÈÄ¥»Ò -define('PLUGIN_TARFILE_SFX_TAR' , '.tar'); -define('PLUGIN_TARFILE_SFX_GZIP', '.tar.gz'); +define('PLUGIN_DUMP_SFX_TAR' , '.tar'); +define('PLUGIN_DUMP_SFX_GZIP', '.tar.gz'); // TAR¥Õ¥¡¥¤¥ëÍÑÄêµÁ define('TAR_HDR_LEN', 512); // ¥Ø¥Ã¥À¤ÎÂ礭¤µ @@ -65,8 +65,8 @@ define('ARCFILE_GZIP', 0); define('ARCFILE_TAR', 1); // actionÄêµÁ -define('PLUGIN_TARFILE_CREATE', 'act_download'); // Create & download -define('PLUGIN_TARFILE_RESTORE', 'act_upload'); // Upload & restore +define('PLUGIN_DUMP_CREATE', 'act_download'); // Create & download +define('PLUGIN_DUMP_RESTORE', 'act_upload'); // Upload & restore ///////////////////////////////////////////////// @@ -85,10 +85,10 @@ function plugin_tarfile_action() if ($pass !== NULL) { if((md5($pass) == $adminpass) && ($act !== NULL) ) { switch($act){ - case PLUGIN_TARFILE_CREATE: + case PLUGIN_DUMP_CREATE: $body = plugin_tarfile_download(); break; - case PLUGIN_TARFILE_RESTORE: + case PLUGIN_DUMP_RESTORE: $retcode = plugin_tarfile_upload(); $body .= $retcode['msg']; if($retcode['code'] == true) { @@ -224,9 +224,9 @@ function download_tarfile($name, $arc_kind) $filename = strftime("tar%Y%m%d", time()) . $file_ext; if($arc_kind == ARCFILE_GZIP) { - $filename .= PLUGIN_TARFILE_SFX_GZIP; + $filename .= PLUGIN_DUMP_SFX_GZIP; } else { - $filename .= PLUGIN_TARFILE_SFX_TAR; + $filename .= PLUGIN_DUMP_SFX_TAR; } $size = filesize($name); @@ -244,10 +244,10 @@ function plugin_tarfile_disp_form() { global $script, $defaultpage; - $act_down = PLUGIN_TARFILE_CREATE; - $act_up = PLUGIN_TARFILE_RESTORE; - $maxsize = PLUGIN_TARFILE_MAX_FILESIZE * 1024; - $maxsizekb = PLUGIN_TARFILE_MAX_FILESIZE; + $act_down = PLUGIN_DUMP_CREATE; + $act_up = PLUGIN_DUMP_RESTORE; + $maxsize = PLUGIN_DUMP_MAX_FILESIZE * 1024; + $maxsizekb = PLUGIN_DUMP_MAX_FILESIZE; $data = << @@ -588,7 +588,7 @@ class compact_tarlib $filename = $dirname . $filename; if(function_exists('mb_convert_encoding')) { // ¥Õ¥¡¥¤¥ë̾¤Îʸ»ú¥³¡¼¥É¤òÊÑ´¹ - $filename = mb_convert_encoding($filename, PLUGIN_TARFILE_FILENAME_ENCORDING); + $filename = mb_convert_encoding($filename, PLUGIN_DUMP_FILENAME_ENCORDING); } } else diff --git a/plugin/tarfile.inc.php b/plugin/tarfile.inc.php deleted file mode 100644 index 9177479..0000000 --- a/plugin/tarfile.inc.php +++ /dev/null @@ -1,729 +0,0 @@ - $msg, 'body' => $body); - } - break; - } - } else { - $body = ($pass === NULL) ? '' : "

¥Ñ¥¹¥ï¡¼¥É¤¬°ã¤¤¤Þ¤¹¡£

\n"; - } - } - - // ÆþÎÏ¥Õ¥©¡¼¥à¤òɽ¼¨ - $body .= plugin_tarfile_disp_form(); - - return array('msg' => 'tarfile', 'body' => $body); -} - -///////////////////////////////////////////////// -// ¥Õ¥¡¥¤¥ë¤Î¥À¥¦¥ó¥í¡¼¥É -function plugin_tarfile_download() -{ - global $post; - - // ¥¢¡¼¥«¥¤¥Ö¤Î¼ïÎà - $arc_kind = ($post['pcmd'] == 'tar') ? ARCFILE_TAR : ARCFILE_GZIP; - - // ¥Ú¡¼¥¸Ì¾¤ËÊÑ´¹¤¹¤ë - $namedecode = isset($post['namedecode']) ? true : false; - - // ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¥£¥ì¥¯¥È¥ê - $bk_wiki = isset($post['bk_wiki']) ? true : false; - $bk_attach = isset($post['bk_attach']) ? true : false; - $bk_backup = isset($post['bk_backup']) ? true : false; - - $tar = new compact_tarlib(); - - // ¥Õ¥¡¥¤¥ë¤òÀ¸À®¤¹¤ë - if($tar->create(CACHE_DIR, $arc_kind)) - { - $filecount = 0; // ¥Õ¥¡¥¤¥ë¿ô - if ($bk_wiki) $filecount .= $tar->add(DATA_DIR, '^[0-9A-F]+\.txt', $namedecode); - if ($bk_attach) $filecount .= $tar->add(UPLOAD_DIR, '^[0-9A-F_]+', $namedecode); - if ($bk_backup) $filecount .= $tar->add(BACKUP_DIR, '^[0-9A-F]+\.gz', $namedecode); - $tar->close(); - - if($filecount > 0) { - // ¥À¥¦¥ó¥í¡¼¥É - download_tarfile($tar->filename, $arc_kind); - @unlink($tar->filename); - exit; // Àµ¾ï½ªÎ» - } else { - @unlink($tar->filename); - return '

¥Õ¥¡¥¤¥ë¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£

'; - } - } - else - { - die_message('¥Æ¥ó¥Ý¥é¥ê¥Õ¥¡¥¤¥ë¤ÎÀ¸À®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£'); - } -} - -///////////////////////////////////////////////// -// ¥Õ¥¡¥¤¥ë¤Î¥¢¥Ã¥×¥í¡¼¥É -function plugin_tarfile_upload() -{ - global $post; - - $code = false; - $msg = ''; - - // ¥¢¡¼¥«¥¤¥Ö¤Î¼ïÎà - $arc_kind = ($post['pcmd'] == 'tar') ? ARCFILE_TAR : ARCFILE_GZIP; - - $filename = $_FILES['upload_file']['name']; - - - // ¥¢¥Ã¥×¥í¡¼¥É¥Õ¥¡¥¤¥ë - $uploadfile = tempnam(CACHE_DIR, 'upload' ); - if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $uploadfile)) - { - // tar¥Õ¥¡¥¤¥ë¤òŸ³«¤¹¤ë - $tar = new compact_tarlib(); - if($tar->open($uploadfile, $arc_kind)) - { - // DATA_DIR (wiki/*.txt) - $quote_wiki = preg_quote(DATA_DIR, '/'); - $quote_wiki .= '((?:[0-9A-F])+)(\.txt){0,1}'; - - // UPLOAD_DIR (attach/*) - $quote_attach = preg_quote(UPLOAD_DIR,'/'); - $quote_attach .= '((?:[0-9A-F]{2})+)_((?:[0-9A-F])+)'; - - $pattern = "((^$quote_wiki)|(^$quote_attach))"; - - $files = $tar->extract($pattern); - if(! empty($files)) { - $msg = '

Ÿ³«¤·¤¿¥Õ¥¡¥¤¥ë°ìÍ÷

'; - $code = true; - } else { - $msg = '

Ÿ³«¤Ç¤­¤ë¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£

'; - $code = false; - } - $tar->close(); - } - else - { - $msg = '

¥Õ¥¡¥¤¥ë¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£

'; - $code = false; - } - // ½èÍý¤¬½ªÎ»¤·¤¿¤é¥¢¥Ã¥×¥í¡¼¥É¤·¤¿¥Õ¥¡¥¤¥ë¤Ïºï½ü¤¹¤ë - @unlink($uploadfile); - } - else - { - die_message('¥Õ¥¡¥¤¥ë¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£'); - } - - return array('code' => $code , 'msg' => $msg); -} - -///////////////////////////////////////////////// -// tar¥Õ¥¡¥¤¥ë¤Î¥À¥¦¥ó¥í¡¼¥É -function download_tarfile($name, $arc_kind) -{ - // ¥Õ¥¡¥¤¥ë̾ - $filename = strftime("tar%Y%m%d", time()) . $file_ext; - - if($arc_kind == ARCFILE_GZIP) { - $filename .= PLUGIN_TARFILE_SFX_GZIP; - } else { - $filename .= PLUGIN_TARFILE_SFX_TAR; - } - - $size = filesize($name); - - header('Content-Disposition: attachment; filename="' . $filename . '"'); - header('Content-Length: ' . $size); - header('Content-Type: application/octet-stream'); - header('Pragma: no-cache'); - @readfile($name); -} - -///////////////////////////////////////////////// -// ÆþÎÏ¥Õ¥©¡¼¥à¤òɽ¼¨ -function plugin_tarfile_disp_form() -{ - global $script, $defaultpage; - - $act_down = PLUGIN_TARFILE_CREATE; - $act_up = PLUGIN_TARFILE_RESTORE; - $maxsize = PLUGIN_TARFILE_MAX_FILESIZE * 1024; - $maxsizekb = PLUGIN_TARFILE_MAX_FILESIZE; - - $data = << -TAR¥Õ¥¡¥¤¥ë¥Ð¥Ã¥¯¥¢¥Ã¥× / ¥ê¥¹¥È¥¢¥×¥é¥°¥¤¥ó - -

-

Tar¥Õ¥¡¥¤¥ë¤Î¥À¥¦¥ó¥í¡¼¥É

-
-
- - - - -

¥¢¡¼¥«¥¤¥Ö¤Î·Á¼° -
- ¡Á.tar.gz ·Á¼°
- ¡Á.tar ·Á¼° -

-

¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¥£¥ì¥¯¥È¥ê -
- wiki
- attach
- backup -

-

¥ª¥×¥·¥ç¥ó -
- ¥Õ¥¡¥¤¥ë̾¤ò¥Ú¡¼¥¸Ì¾¤ËÊÑ´¹ (¢¨¥ê¥¹¥È¥¢¤Ë»È¤¦¤³¤È¤Ï¤Ç¤­¤Ê¤¯¤Ê¤ê¤Þ¤¹)
-

-

´ÉÍý¼Ô¥Ñ¥¹¥ï¡¼¥É - - -

-
-
- -

¥Ç¡¼¥¿¤Î¥ê¥¹¥È¥¢

-
-
- - - - -

[½ÅÍ×] Ʊ¤¸Ì¾Á°¤Î¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤Ï¾å½ñ¤­¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢½½Ê¬¤´Ãí°Õ¤¯¤À¤µ¤¤¡£

-

-¥¢¥Ã¥×¥í¡¼¥É²Äǽ¤ÊºÇÂç¥Õ¥¡¥¤¥ë¥µ¥¤¥º¤Ï¡¢$maxsizekb KByte ¤Þ¤Ç¤Ç¤¹¡£
-
- ¥Õ¥¡¥¤¥ë: -

-

¥¢¡¼¥«¥¤¥Ö¤Î·Á¼° -
- ¡Á.tar.gz ·Á¼°
- ¡Á.tar ·Á¼° -

-

´ÉÍý¼Ô¥Ñ¥¹¥ï¡¼¥É - - -

-
-
-EOD; - - return $data; -} - -///////////////////////////////////////////////// -// tar¥Ç¡¼¥¿¤ÎºîÀ®/Ÿ³«¥é¥¤¥Ö¥é¥ê - -class compact_tarlib -{ - var $filename; - var $fp; - var $status; - var $dummydata; - var $arc_kind; - - // ¥³¥ó¥¹¥È¥é¥¯¥¿ - function compact_tarlib( $name = '' ) { - $this->fp = false; - $this->filename = $name; - $this->status = TAR_STATS_INIT; - $arc_kind = ARCFILE_GZIP; - } - - //////////////////////////////////////////////////////////// - // - // ´Ø¿ô : tar¥Õ¥¡¥¤¥ë¤ò³«¤¯ - // °ú¿ô : tar¥Õ¥¡¥¤¥ë̾ - // ÊÖ¤êÃÍ: ture .. À®¸ù , false .. ¼ºÇÔ - // - //////////////////////////////////////////////////////////// - function open( $name = '', $kind = ARCFILE_GZIP ) - { - if( $name != '' ) $this->filename = $name; - - if($kind == ARCFILE_GZIP) { - $this->arc_kind = ARCFILE_GZIP; - $this->fp = gzopen( $this->filename, 'rb'); - } else { - $this->arc_kind = ARCFILE_TAR; - $this->fp = fopen( $this->filename, 'rb'); - } - - if( $this->fp == false ) return false; // »ØÄê¥Õ¥¡¥¤¥ë¤Ê¤· - - $this->status = TAR_STATS_OPEN; - rewind($this->fp); - - return true; - } - - //////////////////////////////////////////////////////////// - // - // ´Ø¿ô : tar¥Õ¥¡¥¤¥ë¤òºîÀ®¤¹¤ë - // °ú¿ô : tar¥Õ¥¡¥¤¥ë¤òºîÀ®¤¹¤ë¥Ñ¥¹ - // ÊÖ¤êÃÍ: ture .. À®¸ù , false .. ¼ºÇÔ - // - //////////////////////////////////////////////////////////// - function create( $odir, $kind = ARCFILE_GZIP ) - { - $tname = tempnam( $odir, 'tar' ); - - if($kind == ARCFILE_GZIP) { - $this->arc_kind = ARCFILE_GZIP; - $this->fp = gzopen($tname, 'wb'); - } else { - $this->arc_kind = ARCFILE_TAR; - $this->fp = @fopen($tname, 'wb'); - } - if( $this->fp==false ) return false; // ºîÀ®¼ºÇÔ - - // ºîÀ®¤ËÀ®¸ù¤·¤¿¤é¥Õ¥¡¥¤¥ë̾¤òµ­²±¤·¤Æ¤ª¤¯ - $this->filename = $tname; - $this->status = TAR_STATS_CREATE; - - // ¥À¥ß¡¼¥Ç¡¼¥¿ - $this->dummydata = join('', array_fill(0, TAR_BLK_LEN, "\0")); - rewind($this->fp); - - return true; - } - - //////////////////////////////////////////////////////////// - // - // ´Ø¿ô : tar¥Õ¥¡¥¤¥ë¤òÊĤ¸¤ë - // °ú¿ô : ¤Ê¤· - // ÊÖ¤êÃÍ: ¤Ê¤· - // - //////////////////////////////////////////////////////////// - function close() - { - if($this->status = TAR_STATS_CREATE) - { - // ¥Ð¥¤¥Ê¥ê¡¼¥¼¥í¤ò1024¥Ð¥¤¥È½ÐÎÏ - flock($this->fp, LOCK_EX); - fwrite($this->fp, $this->dummydata, TAR_HDR_LEN); - fwrite($this->fp, $this->dummydata, TAR_HDR_LEN); - flock($this->fp, LOCK_UN); - - // ¥Õ¥¡¥¤¥ë¤òÊĤ¸¤ë - if($this->arc_kind == ARCFILE_GZIP) { - gzclose($this->fp); - } else { - fclose($this->fp); - } - } - else if($this->status = TAR_STATS_OPEN) - { - if($this->arc_kind == ARCFILE_GZIP) { - gzclose($this->fp); - } else { - fclose($this->fp); - } - } - - $this->status = TAR_STATS_INIT; - } - - //////////////////////////////////////////////////////////// - // - // ´Ø¿ô : »ØÄꤷ¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Ëtar¥Õ¥¡¥¤¥ë¤òŸ³«¤¹¤ë - // °ú¿ô : Ÿ³«¤¹¤ë¥Õ¥¡¥¤¥ë¥Ñ¥¿¡¼¥ó(Àµµ¬É½¸½) - // ÊÖ¤êÃÍ: Ÿ³«¤·¤¿¥Õ¥¡¥¤¥ë̾¤Î°ìÍ÷ - // Êä­ : ARAI¤µ¤ó¤Îattach¥×¥é¥°¥¤¥ó¥Ñ¥Ã¥Á¤ò»²¹Í¤Ë¤·¤Þ¤·¤¿ - // - //////////////////////////////////////////////////////////// - function extract( $pattern ) - { - if($this->status != TAR_STATS_OPEN) - return ''; // open¤µ¤ì¤Æ¤¤¤Ê¤¤ - - $files = array(); - $longname = ''; - - while(1) { - $buff = fread($this->fp,TAR_HDR_LEN); - if(strlen($buff) != TAR_HDR_LEN ) break; - - // ¥Õ¥¡¥¤¥ë̾ - if($longname != '') { - $name = $longname; // LongLinkÂбþ - $longname = ''; - } else { - $name = ''; - for ($i = 0; $i < TAR_HDR_NAME_LEN; $i++ ) { - if($buff{$i + TAR_HDR_NAME_OFFSET} != '\0') { - $name .= $buff{$i + TAR_HDR_NAME_OFFSET}; - } else { - break; - } - } - } - - $name = trim($name); - if($name == '') break; // Ÿ³«½ªÎ» - - // ¥Á¥§¥Ã¥¯¥µ¥à¤ò¼èÆÀ¤·¤Ä¤Ä¡¢¥Ö¥é¥ó¥¯¤ËÃÖ´¹¤·¤Æ¤¤¤¯ - $checksum = ''; - $chkblanks = TAR_DATA_CHKBLANKS; - for ($i = 0; $i < TAR_HDR_CHKSUM_LEN; $i++ ) - { - $checksum .= $buff{$i + TAR_HDR_CHKSUM_OFFSET}; - $buff{$i + TAR_HDR_CHKSUM_OFFSET} = $chkblanks{$i}; - } - list($checksum) = sscanf('0' . trim($checksum), "%i"); - - // ¥Á¥§¥Ã¥¯¥µ¥à¤Î·×»» - $sum = 0; - for($i = 0; $i < TAR_BLK_LEN; $i++ ) { - $sum += 0xff & ord($buff{$i}); - } - - if($sum != $checksum) break; // ¥Á¥§¥Ã¥¯¥µ¥à¥¨¥é¡¼ - - // ¥µ¥¤¥º - $size = ''; - for ($i = 0; $i < TAR_HDR_SIZE_LEN; $i++ ) { - $size .= $buff{$i + TAR_HDR_SIZE_OFFSET}; - } - - list($size) = sscanf('0' . trim($size), "%i"); - - // ceil - // ¥Ç¡¼¥¿¥Ö¥í¥Ã¥¯¤Ï512byte¤Ç¥Ñ¥Ç¥£¥ó¥°¤µ¤ì¤Æ¤¤¤ë - $pdsz = ceil($size / TAR_BLK_LEN) * TAR_BLK_LEN; - - // ºÇ½ª¹¹¿·»þ¹ï - $strmtime = ''; - for ($i = 0; $i < TAR_HDR_MTIME_LEN; $i++ ) { - $strmtime .= $buff{$i + TAR_HDR_MTIME_OFFSET}; - } - list($mtime) = sscanf('0' . trim($strmtime), "%i"); - - // ¥¿¥¤¥×¥Õ¥é¥° - $type = $buff{TAR_HDR_TYPE_OFFSET}; - - if($name == TAR_DATA_LONGLINK) - { - // LongLink - $buff = fread( $this->fp, $pdsz ); - $longname = substr($buff, 0, $size); - } - else if (preg_match("/$pattern/", $name) ) -// if ($type == 0 && preg_match("/$pattern/", $name) ) - { - $buff = fread($this->fp, $pdsz); - - // ´û¤ËƱ¤¸¥Õ¥¡¥¤¥ë¤¬¤¢¤ë¾ì¹ç¤Ï¾å½ñ¤­¤µ¤ì¤ë - if($fpw = @fopen($name, 'wb')) { - fwrite($fpw, $buff, $size); - fclose($fpw); - chmod($name, 0666); // Ç°¤Î¤¿¤á¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤òÀßÄꤷ¤Æ¤ª¤¯ - touch($name, $mtime); // ºÇ½ª¹¹¿·»þ¹ï¤Î½¤Àµ - $files[] = $name; - } - } - else - { - // ¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿¤ò¿Ê¤á¤ë - @fseek($this->fp, $pdsz, SEEK_CUR); - } - } - return $files; - } - - //////////////////////////////////////////////////////////// - // - // ´Ø¿ô : tar¥Õ¥¡¥¤¥ë¤ËÄɲ乤ë - // °ú¿ô : $dir .. ¥Ç¥£¥ì¥¯¥È¥ê̾ - // $mask .. Äɲ乤ë¥Õ¥¡¥¤¥ë(Àµµ¬É½¸½) - // $decode .. ¥Ú¡¼¥¸Ì¾¤ÎÊÑ´¹¤ò¤¹¤ë¤« - // ÊÖ¤êÃÍ: ºîÀ®¤·¤¿¥Õ¥¡¥¤¥ë¿ô - // - //////////////////////////////////////////////////////////// - function add($dir, $mask, $decode = false) - { - $retvalue = 0; - - if ($this->status != TAR_STATS_CREATE) - return ''; // ¥Õ¥¡¥¤¥ë¤¬ºîÀ®¤µ¤ì¤Æ¤¤¤Ê¤¤ - - unset($files); - - // »ØÄꤵ¤ì¤¿¥Ñ¥¹¤Î¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È¤ò¼èÆÀ¤¹¤ë - $dp = @opendir($dir) or - die_message($dir . ' is not found or not readable.'); - while ($filename = readdir($dp)) { - if(preg_match("/$mask/", $filename)) { - $files[] = $dir . $filename; - } - } - closedir($dp); - - sort($files); - - foreach($files as $name) - { - // Tar¤Ë³ÊǼ¤¹¤ë¥Õ¥¡¥¤¥ë̾ - if($decode == true ) - { - // ¥Õ¥¡¥¤¥ë̾¤ò¥Ú¡¼¥¸Ì¾¤ËÊÑ´¹¤¹¤ë½èÍý - $dirname = dirname(trim($name)) . '/'; - $filename = basename(trim($name)); - if(preg_match("/^((?:[0-9A-F]{2})+)_((?:[0-9A-F]{2})+)/", $filename, $matches)) - { - // 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_TARFILE_FILENAME_ENCORDING); - } - } - else - { - $filename = $name; - } - - // ºÇ½ª¹¹¿·»þ¹ï - $mtime = filemtime( $name ); - - // ¥Õ¥¡¥¤¥ë̾Ĺ¤Î¥Á¥§¥Ã¥¯ - if(strlen($filename) > TAR_HDR_NAME_LEN) { - // LongLinkÂбþ - $size = strlen($filename); - // LonkLink¥Ø¥Ã¥ÀÀ¸À® - $tar_data = $this->make_header(TAR_DATA_LONGLINK, $size, $mtime, TAR_HDR_LINK); - // ¥Õ¥¡¥¤¥ë½ÐÎÏ - $this->write_data(join('', $tar_data), $filename, $size); - } - - // ¥Õ¥¡¥¤¥ë¥µ¥¤¥º¤ò¼èÆÀ - $size = filesize( $name ); - if ($size == FALSE) { - die_message($name . ' is not found or not readable.'); - continue; // ¥Õ¥¡¥¤¥ë¤¬¤Ê¤¤ - } - - // ¥Ø¥Ã¥ÀÀ¸À® - $tar_data = $this->make_header($filename, $size, $mtime, TAR_HDR_FILE); - - // ¥Õ¥¡¥¤¥ë¥Ç¡¼¥¿¤Î¼èÆÀ - $fpr = @fopen($name , 'rb'); - $data = fread($fpr, $size); - fclose( $fpr ); - - // ¥Õ¥¡¥¤¥ë½ÐÎÏ - $this->write_data(join('', $tar_data), $data, $size); - ++$retvalue; - } - return $retvalue; - } - - //////////////////////////////////////////////////////////// - // - // ´Ø¿ô : tar¤Î¥Ø¥Ã¥À¾ðÊó¤òÀ¸À®¤¹¤ë - // °ú¿ô : $filename .. ¥Õ¥¡¥¤¥ë̾ - // $size .. ¥Ç¡¼¥¿¥µ¥¤¥º - // $mtime .. ºÇ½ª¹¹¿·Æü - // $typeflag .. TypeFlag (file/link) - // Ìá¤êÃÍ: tar¥Ø¥Ã¥À¾ðÊó - // - //////////////////////////////////////////////////////////// - function make_header($filename, $size, $mtime, $typeflag) - { - $tar_data = array_fill(0, TAR_HDR_LEN, "\0"); - - // ¥Õ¥¡¥¤¥ë̾¤òÊݸ - for($i = 0; $i < strlen($filename); $i++ ) - { - if ($i < TAR_HDR_NAME_LEN) { - $tar_data[$i + TAR_HDR_NAME_OFFSET] = $filename{$i}; - } else { - break; // ¥Õ¥¡¥¤¥ë̾¤¬Ä¹¤¹¤® - } - } - - // mode - $modeid = TAR_DATA_MODE; - for($i = 0; $i < strlen($modeid); $i++ ) { - $tar_data[$i + TAR_HDR_MODE_OFFSET] = $modeid{$i}; - } - - // uid / gid - $ugid = TAR_DATA_UGID; - for($i = 0; $i < strlen($ugid); $i++ ) { - $tar_data[$i + TAR_HDR_UID_OFFSET] = $ugid{$i}; - $tar_data[$i + TAR_HDR_GID_OFFSET] = $ugid{$i}; - } - - // ¥µ¥¤¥º - $strsize = sprintf('%11o', $size); - for($i = 0; $i < strlen($strsize); $i++ ) { - $tar_data[$i + TAR_HDR_SIZE_OFFSET] = $strsize{$i}; - } - - // ºÇ½ª¹¹¿·»þ¹ï - $strmtime = sprintf('%o', $mtime); - for($i = 0; $i < strlen($strmtime); $i++ ) { - $tar_data[$i + TAR_HDR_MTIME_OFFSET] = $strmtime{$i}; - } - - // ¥Á¥§¥Ã¥¯¥µ¥à·×»»ÍѤΥ֥é¥ó¥¯¤òÀßÄê - $chkblanks = TAR_DATA_CHKBLANKS; - for($i = 0; $i < strlen($chkblanks); $i++ ) { - $tar_data[$i + TAR_HDR_CHKSUM_OFFSET] = $chkblanks{$i}; - } - - // ¥¿¥¤¥×¥Õ¥é¥° - $tar_data[TAR_HDR_TYPE_OFFSET] = $typeflag; - - // ¥Á¥§¥Ã¥¯¥µ¥à¤Î·×»» - $sum = 0; - for($i = 0; $i < TAR_BLK_LEN; $i++ ) { - $sum += 0xff & ord($tar_data[$i]); - } - $strchksum = sprintf('%7o',$sum); - for($i = 0; $i < strlen($strchksum); $i++ ) { - $tar_data[$i + TAR_HDR_CHKSUM_OFFSET] = $strchksum{$i}; - } - return $tar_data; - } - - //////////////////////////////////////////////////////////// - // - // ´Ø¿ô : tar¥Ç¡¼¥¿¤Î¥Õ¥¡¥¤¥ë½ÐÎÏ - // °ú¿ô : $header .. tar¥Ø¥Ã¥À¾ðÊó - // $body .. tar¥Ç¡¼¥¿ - // $size .. ¥Ç¡¼¥¿¥µ¥¤¥º - // Ìá¤êÃÍ: ¤Ê¤· - // - //////////////////////////////////////////////////////////// - function write_data($header, $body, $size) - { - // ¥Õ¥£¥ë¤¹¤ë¥µ¥¤¥º¤ò·×»»¤·¤Æ¤ª¤¯ - $fixsize = ceil($size / TAR_BLK_LEN) * TAR_BLK_LEN; - $fixsize -= $size; - - flock($this->fp, LOCK_EX); - fwrite($this->fp, $header, TAR_HDR_LEN); // ¥Ø¥Ã¥À½ÐÎÏ - fwrite($this->fp, $body, $size); // ¥Ç¡¼¥¿½ÐÎÏ - - // ¥µ¥¤¥ºÄ´À°(¤¢¤Þ¤Ã¤¿Éôʬ¤ò0¤Ç¥Õ¥£¥ë) - fwrite($this->fp, $this->dummydata, $fixsize); // Padding - - flock($this->fp, LOCK_UN); - } -} -?> -- 2.11.0