diff options
Diffstat (limited to 'phpBB/includes/functions_compress.php')
| -rw-r--r-- | phpBB/includes/functions_compress.php | 46 | 
1 files changed, 41 insertions, 5 deletions
| diff --git a/phpBB/includes/functions_compress.php b/phpBB/includes/functions_compress.php index 455debd939..4675394633 100644 --- a/phpBB/includes/functions_compress.php +++ b/phpBB/includes/functions_compress.php @@ -2,9 +2,8 @@  /**  *  * @package phpBB3 -* @version $Id$  * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2  *  */ @@ -25,6 +24,11 @@ class compress  	var $fp = 0;  	/** +	* @var array +	*/ +	protected $filelist = array(); + +	/**  	* Add file to archive  	*/  	function add_file($src, $src_rm_prefix = '', $src_add_prefix = '', $skip_files = '') @@ -124,9 +128,41 @@ class compress  	}  	/** +	* 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 array Array of strings of available compression methods (.tar, .tar.gz, .zip, etc.)  	*/ -	function methods() +	public static function methods()  	{  		$methods = array('.tar');  		$available_methods = array('.tar.gz' => 'zlib', '.tar.bz2' => 'bz2', '.zip' => 'zlib'); @@ -362,6 +398,7 @@ class compress_zip extends compress  	function data($name, $data, $is_dir = false, $stat)  	{  		$name = str_replace('\\', '/', $name); +		$name = $this->unique_filename($name);  		$hexdtime = pack('V', $this->unix_to_dos_time($stat[9])); @@ -634,6 +671,7 @@ class compress_tar extends compress  	*/  	function data($name, $data, $is_dir = false, $stat)  	{ +		$name = $this->unique_filename($name);  		$this->wrote = true;  		$fzwrite = 	($this->isbz && function_exists('bzwrite')) ? 'bzwrite' : (($this->isgz && @extension_loaded('zlib')) ? 'gzwrite' : 'fwrite'); @@ -735,5 +773,3 @@ class compress_tar extends compress  		}  	}  } - -?>
\ No newline at end of file | 
