1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-07-30 21:40:43 +02:00

ok, this one is rather large... the most important change:

re-introduce append_sid: old style continues to work, not a performance hog as it was in 2.0.x -> structure is different

apart from this, code cleanage, bug fixing, etc.


git-svn-id: file:///svn/phpbb/trunk@6015 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
Meik Sievertsen
2006-06-06 20:53:46 +00:00
parent 2c8afb820e
commit dd9ad539fd
148 changed files with 5142 additions and 3975 deletions

View File

@@ -16,6 +16,9 @@ class compress
{
var $fp = 0;
/**
* Add file to archive
*/
function add_file($src, $src_rm_prefix = '', $src_add_prefix = '', $skip_files = '')
{
global $phpbb_root_path;
@@ -68,17 +71,23 @@ class compress
$this->data("$src_path$path$file", file_get_contents("$phpbb_root_path$src$path$file"), false, stat("$phpbb_root_path$src$path$file"));
}
}
}
return true;
}
/**
* Add custom file (the filepath will not be adjusted)
*/
function add_custom_file($src, $filename)
{
$this->data($filename, file_get_contents($src), false, stat($src));
return true;
}
/**
* Add file data
*/
function add_data($src, $name)
{
$stat = array();
@@ -90,6 +99,9 @@ class compress
return true;
}
/**
* Return available methods
*/
function methods()
{
$methods = array('.tar');
@@ -111,7 +123,7 @@ class compress
/**
* @package phpBB3
*
* Zip creation class from phpMyAdmin 2.3.0 <EFBFBD> Tobias Ratschiller, Olivier M<>ller, Lo<4C>c Chapeaux,
* Zip creation class from phpMyAdmin 2.3.0 (c) Tobias Ratschiller, Olivier M<>ller, Lo<4C>c Chapeaux,
* Marc Delisle, http://www.phpmyadmin.net/
*
* Zip extraction function by Alexandre Tedeschi, alexandrebr at gmail dot com
@@ -130,11 +142,17 @@ class compress_zip extends compress
var $old_offset = 0;
var $datasec_len = 0;
/**
* Constructor
*/
function compress_zip($mode, $file)
{
return $this->fp = @fopen($file, $mode . 'b');
}
/**
* Convert unix to dos time
*/
function unix_to_dos_time($time)
{
$timearray = (!$time) ? getdate() : getdate($time);
@@ -149,6 +167,9 @@ class compress_zip extends compress
return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
}
/**
* Extract archive
*/
function extract($dst)
{
// Loop the file, looking for files and folders
@@ -276,10 +297,14 @@ class compress_zip extends compress
trigger_error("Unexpected header, ending loop");
break 2;
}
$dd_try = false;
}
}
/**
* Close archive
*/
function close()
{
// Write out central file directory and footer ... if it exists
@@ -290,7 +315,9 @@ class compress_zip extends compress
fclose($this->fp);
}
// Create the structures ... note we assume version made by is MSDOS
/**
* Create the structures ... note we assume version made by is MSDOS
*/
function data($name, $data, $is_dir = false, $stat)
{
$name = str_replace('\\', '/', $name);
@@ -327,6 +354,7 @@ class compress_zip extends compress
// Are we a file or a directory? Set archive for file
$attrib = ($is_dir) ? 16 : 32;
// File Record Header
$fr = "\x50\x4b\x03\x04"; // Local file header 4bytes
$fr .= pack('v', $var_ext); // ver needed to extract 2bytes
@@ -351,21 +379,21 @@ class compress_zip extends compress
// Central Directory Header
$cdrec = "\x50\x4b\x01\x02"; // header 4bytes
$cdrec .= "\x00\x00"; // version made by
$cdrec .= "\x00\x00"; // version made by
$cdrec .= pack('v', $var_ext); // version needed to extract
$cdrec .= "\x00\x00"; // gen purpose bit flag
$cdrec .= "\x00\x00"; // gen purpose bit flag
$cdrec .= $c_method; // compression method
$cdrec .= $hexdtime; // last mod time & date
$cdrec .= pack('V', $crc); // crc32
$cdrec .= pack('V', $c_len); // compressed filesize
$cdrec .= pack('V', $unc_len); // uncompressed filesize
$cdrec .= pack('v', strlen($name)); // length of filename
$cdrec .= pack('v', 0); // extra field length
$cdrec .= pack('v', 0); // file comment length
$cdrec .= pack('v', 0); // disk number start
$cdrec .= pack('v', 0); // internal file attributes
$cdrec .= $hexdtime; // last mod time & date
$cdrec .= pack('V', $crc); // crc32
$cdrec .= pack('V', $c_len); // compressed filesize
$cdrec .= pack('V', $unc_len); // uncompressed filesize
$cdrec .= pack('v', strlen($name)); // length of filename
$cdrec .= pack('v', 0); // extra field length
$cdrec .= pack('v', 0); // file comment length
$cdrec .= pack('v', 0); // disk number start
$cdrec .= pack('v', 0); // internal file attributes
$cdrec .= pack('V', $attrib); // external file attributes
$cdrec .= pack('V', $this->old_offset); // relative offset of local header
$cdrec .= pack('V', $this->old_offset); // relative offset of local header
$cdrec .= $name;
// Save to central directory
@@ -374,6 +402,9 @@ class compress_zip extends compress
$this->old_offset = $this->datasec_len;
}
/**
* file
*/
function file()
{
$ctrldir = implode('', $this->ctrl_dir);
@@ -386,6 +417,9 @@ class compress_zip extends compress
"\x00\x00"; // .zip file comment length
}
/**
* Download archive
*/
function download($filename)
{
global $phpbb_root_path;
@@ -409,7 +443,7 @@ class compress_zip extends compress
* @package phpBB3
*
* Tar/tar.gz compression routine
* Header/checksum creation derived from tarfile.pl, <EFBFBD> Tom Horsley, 1994
* Header/checksum creation derived from tarfile.pl, (c) Tom Horsley, 1994
*/
class compress_tar extends compress
{
@@ -420,6 +454,9 @@ class compress_tar extends compress
var $type = '';
var $wrote = false;
/**
* Constructor
*/
function compress_tar($mode, $file, $type = '')
{
$type = (!$type) ? $file : $type;
@@ -432,6 +469,9 @@ class compress_tar extends compress
$this->open();
}
/**
* Extract archive
*/
function extract($dst)
{
$fzread = ($this->isbz && function_exists('bzread')) ? 'bzread' : (($this->isgz && extension_loaded('zlib')) ? 'gzread' : 'fread');
@@ -491,6 +531,9 @@ class compress_tar extends compress
}
}
/**
* Close archive
*/
function close()
{
$fzclose = ($this->isbz && function_exists('bzclose')) ? 'bzclose' : (($this->isgz && extension_loaded('zlib')) ? 'gzclose' : 'fclose');
@@ -498,12 +541,17 @@ class compress_tar extends compress
if ($this->wrote)
{
$fzwrite = ($this->isbz && function_exists('bzwrite')) ? 'bzwrite' : (($this->isgz && extension_loaded('zlib')) ? 'gzwrite' : 'fwrite');
$fzwrite($this->fp, pack("a512", "")); // Symbolizes that there are no more files
// Symbolizes that there are no more files
$fzwrite($this->fp, pack("a512", ""));
}
$fzclose($this->fp);
}
/**
* Create the structures
*/
function data($name, $data, $is_dir = false, $stat)
{
$this->wrote = true;
@@ -513,12 +561,12 @@ class compress_tar extends compress
// This is the header data, it contains all the info we know about the file or folder that we are about to archive
$header = '';
$header .= pack("a100", $name); // file name
$header .= pack("a8", sprintf("%07o", $stat[2])); // file mode
$header .= pack("a8", sprintf("%07o", $stat[4])); // owner id
$header .= pack("a8", sprintf("%07o", $stat[5])); // group id
$header .= pack("a12", sprintf("%011o", $stat[7])); // file size
$header .= pack("a12", sprintf("%011o", $stat[9])); // last mod time
$header .= pack("a100", $name); // file name
$header .= pack("a8", sprintf("%07o", $stat[2])); // file mode
$header .= pack("a8", sprintf("%07o", $stat[4])); // owner id
$header .= pack("a8", sprintf("%07o", $stat[5])); // group id
$header .= pack("a12", sprintf("%011o", $stat[7])); // file size
$header .= pack("a12", sprintf("%011o", $stat[9])); // last mod time
// Checksum
$checksum = 0;
@@ -530,23 +578,26 @@ class compress_tar extends compress
// We precompute the rest of the hash, this saves us time in the loop and allows us to insert our hash without resorting to string functions
$checksum += 2415 + (($is_dir) ? 53 : 0);
$header .= pack("a8", sprintf("%07o", $checksum)); // checksum
$header .= pack("a1", $typeflag); // link indicator
$header .= pack("a100", ''); // name of linked file
$header .= pack("a6", 'ustar'); // ustar indicator
$header .= pack("a2", '00'); // ustar version
$header .= pack("a32", 'Unknown'); // owner name
$header .= pack("a32", 'Unknown'); // group name
$header .= pack("a8", ''); // device major number
$header .= pack("a8", ''); // device minor number
$header .= pack("a155", ''); // filename prefix
$header .= pack("a12", ''); // end
$header .= pack("a8", sprintf("%07o", $checksum)); // checksum
$header .= pack("a1", $typeflag); // link indicator
$header .= pack("a100", ''); // name of linked file
$header .= pack("a6", 'ustar'); // ustar indicator
$header .= pack("a2", '00'); // ustar version
$header .= pack("a32", 'Unknown'); // owner name
$header .= pack("a32", 'Unknown'); // group name
$header .= pack("a8", ''); // device major number
$header .= pack("a8", ''); // device minor number
$header .= pack("a155", ''); // filename prefix
$header .= pack("a12", ''); // end
// This writes the entire file in one shot. Header, followed by data and then null padded to a multiple of 512
$fzwrite($this->fp, $header . (($stat[7] !== 0 && !$is_dir) ? $data . (($stat[7] % 512 > 0) ? str_repeat("\0", 512 - $stat[7] % 512) : '') : ''));
unset($data);
}
/**
* Open archive
*/
function open()
{
$fzopen = ($this->isbz && function_exists('bzopen')) ? 'bzopen' : (($this->isgz && extension_loaded('zlib')) ? 'gzopen' : 'fopen');
@@ -558,6 +609,9 @@ class compress_tar extends compress
}
}
/**
* Download archive
*/
function download($filename)
{
global $phpbb_root_path;