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 = 'Ÿ³«¤·¤¿¥Õ¥¡¥¤¥ë°ìÍ÷
';
- foreach($files as $name) {
- $msg .= "- $name
\n";
- }
- $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¥Õ¥¡¥¤¥ë¤Î¥À¥¦¥ó¥í¡¼¥É
-
-
-¥Ç¡¼¥¿¤Î¥ê¥¹¥È¥¢
-
-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