Archive_Tar
最新バージョンの は、そのままではそのような機能をまだサポートしていません。機能の一部は に_addFile()
あり、他の部分は にあり_addString()
ます。
おそらく最も簡単なのは、公開されているArchive_Tar
すべての呼び出しを拡張してプロキシ_writeHeaderBlock()
し、ファイル名パラメーターにマップを適用して、ヘッダーに書き込むときに名前を変更することです。
class Patched_Archive_Tar extends Archive_Tar
{
var $renameMap = array();
function _writeHeaderBlock($p_filename, $p_size, $p_mtime=0, $p_perms=0,
$p_type='', $p_uid=0, $p_gid=0)
{
return parent::_writeHeaderBlock($this->_translateFilename($p_filename),
$p_size, $p_mtime=0, $p_perms=0,
$p_type='', $p_uid=0, $p_gid=0);
}
function _translateFilename($orignal)
{
$map = $this->renameMap;
if (isset($map[$orignal])) {
return $map[$orignal];
}
return $original;
}
}
使用法:
$obj = new Patched_Archive_Tar('dummy.tar'); // name of archive
$files = array('mystuff/ad.gif',
'mystuff/alcon.doc.t',
'mystuff/alcon.xls.t'); // files to store in archive
$obj->renameMap = array(
'mystuff/alcon.doc.t' => 'mystuff/alcon.doc',
'mystuff/alcon.xls.t' => 'mystuff/alcon.xls',
) // files to rename
if ($obj->create($files)) {
echo 'Created successfully!';
} else {
echo 'Error in file creation';
}
これは迅速で汚いですが、うまくいけば機能します。冒頭で気づいた関数と をよく見てください_addFile()
。基本的には、ファイル名を指定して_addString()
( のように) ファイルを追加できる別の関数が必要です ( のように)。_addFile()
_addString()