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()
。