mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-12 14:28:56 +00:00
Merge remote-tracking branch 'Fyorl/ticket/11044' into develop
* Fyorl/ticket/11044: [ticket/11044] Added comment explaining filename splitting [ticket/11044] Preserve the file extension in unique filenames [ticket/11044] Minor adjustments as per PR comments [ticket/11044] Compress class now deals with file conflicts
This commit is contained in:
commit
095d7d97a3
1 changed files with 37 additions and 0 deletions
|
@ -23,6 +23,11 @@ class compress
|
||||||
{
|
{
|
||||||
var $fp = 0;
|
var $fp = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $filelist = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add file to archive
|
* Add file to archive
|
||||||
*/
|
*/
|
||||||
|
@ -122,6 +127,36 @@ class compress
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a file by that name as already been added and, if it has,
|
||||||
|
* returns a new, unique name.
|
||||||
|
*
|
||||||
|
* @param string $name The filename
|
||||||
|
* @return string A unique filename
|
||||||
|
*/
|
||||||
|
protected function unique_filename($name)
|
||||||
|
{
|
||||||
|
if (isset($this->filelist[$name]))
|
||||||
|
{
|
||||||
|
$start = $name;
|
||||||
|
$ext = '';
|
||||||
|
$this->filelist[$name]++;
|
||||||
|
|
||||||
|
// Separate the extension off the end of the filename to preserve it
|
||||||
|
$pos = strrpos($name, '.');
|
||||||
|
if ($pos !== false)
|
||||||
|
{
|
||||||
|
$start = substr($name, 0, $pos);
|
||||||
|
$ext = substr($name, $pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $start . '_' . $this->filelist[$name] . $ext;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->filelist[$name] = 0;
|
||||||
|
return $name;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return available methods
|
* Return available methods
|
||||||
*/
|
*/
|
||||||
|
@ -361,6 +396,7 @@ class compress_zip extends compress
|
||||||
function data($name, $data, $is_dir = false, $stat)
|
function data($name, $data, $is_dir = false, $stat)
|
||||||
{
|
{
|
||||||
$name = str_replace('\\', '/', $name);
|
$name = str_replace('\\', '/', $name);
|
||||||
|
$name = $this->unique_filename($name);
|
||||||
|
|
||||||
$hexdtime = pack('V', $this->unix_to_dos_time($stat[9]));
|
$hexdtime = pack('V', $this->unix_to_dos_time($stat[9]));
|
||||||
|
|
||||||
|
@ -633,6 +669,7 @@ class compress_tar extends compress
|
||||||
*/
|
*/
|
||||||
function data($name, $data, $is_dir = false, $stat)
|
function data($name, $data, $is_dir = false, $stat)
|
||||||
{
|
{
|
||||||
|
$name = $this->unique_filename($name);
|
||||||
$this->wrote = true;
|
$this->wrote = true;
|
||||||
$fzwrite = ($this->isbz && function_exists('bzwrite')) ? 'bzwrite' : (($this->isgz && @extension_loaded('zlib')) ? 'gzwrite' : 'fwrite');
|
$fzwrite = ($this->isbz && function_exists('bzwrite')) ? 'bzwrite' : (($this->isgz && @extension_loaded('zlib')) ? 'gzwrite' : 'fwrite');
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue