Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008
Откуда: Москва
Помог: 57 раз(а)
|
tar - это *nix-овый архиватор. В винде такая команда не прокатит.
Я для создания ZIP-ов этим пользуюсь:
сама фунция внизу. Просто сохраняешь это в отдельный файл, инклюдишь его, вызываешь append_to_zip($in_files, $arc_file, $compress) и всё! только переменные не забудь определить
PHP:
скопировать код в буфер обмена
<? class zipfile { var $filename; var $ctrl_dir = array() ; var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; var $old_offset = 0; function add_dir($name) { $fr = "\x50\x4b\x03\x04"; $fr .= "\x0a\x00"; $fr .= "\x00\x00"; $fr .= "\x00\x00"; $fr .= "\x00\x00\x00\x00"; $fr .= $name; $f = fopen($this->filename, "a+") ; $new_offset = filesize($this->filename) ; $cdrec = "\x50\x4b\x01\x02"; $cdrec .= "\x00\x00"; $cdrec .= "\x0a\x00"; $cdrec .= "\x00\x00"; $cdrec .= "\x00\x00"; $cdrec .= "\x00\x00\x00\x00"; $cdrec .= pack("v", 0 ) ; $cdrec .= pack("v", 0 ) ; $cdrec .= pack("v", 0 ) ; $cdrec .= pack("v", 0 ) ; $ext = "\x00\x00\x10\x00"; $ext = "\xff\xff\xff\xff"; $cdrec .= pack("V", 16 ) ; $cdrec .= pack("V", $this -> old_offset ) ; $cdrec .= $name; $this -> ctrl_dir[] = $cdrec; $this -> old_offset = $new_offset; return; } function add_file($data, $name, $compression = 6) { $zdata = substr ($zdata, 2 , -4 ) ; $fr = "\x50\x4b\x03\x04"; $fr .= "\x14\x00"; $fr .= "\x00\x00"; $fr .= "\x08\x00"; $fr .= "\x00\x00\x00\x00"; $fr .= pack("V", $c_len) ; $fr .= pack("V", $unc_len) ; $fr .= $name; $fr .= $zdata; $fr .= pack("V", $c_len) ; $fr .= pack("V", $unc_len) ; $f = fopen($this->filename, "a+") ; $new_offset = filesize($this->filename) ; $cdrec = "\x50\x4b\x01\x02"; $cdrec .= "\x00\x00"; $cdrec .= "\x14\x00"; $cdrec .= "\x00\x00"; $cdrec .= "\x08\x00"; $cdrec .= "\x00\x00\x00\x00"; $cdrec .= pack("V", $crc) ; $cdrec .= pack("V", $c_len) ; $cdrec .= pack("V", $unc_len) ; $cdrec .= pack("v", 0 ) ; $cdrec .= pack("v", 0 ) ; $cdrec .= pack("v", 0 ) ; $cdrec .= pack("v", 0 ) ; $cdrec .= pack("V", 32 ) ; $cdrec .= pack("V", $this -> old_offset ) ; $this -> old_offset = $new_offset; $cdrec .= $name; $this -> ctrl_dir[] = $cdrec; } { $ctrldir = implode("", $this -> ctrl_dir) ; $f = fopen($this->filename, "a+") ; $this -> eof_ctrl_dir. pack("V", $datasize) ."\x00\x00") ; } } //****************************************** //$in_files - массив имен файлов, которые мы арх-ем // $arc_file - имя получившегося архива // $compress - степень сжатия. до 9 /////////////////////// function append_to_zip($in_files, $arc_file, $compress) { $zip = new zipfile(); $zip->filename = $arc_file; for ($i = 0; !is_null($in_files[$i]); $i++) { $file = $in_files[$i]; $src_file = fopen($file , 'rb') ; $compression = $compress; $zip->add_file(fread($src_file, 30000000 ) , $file, $compression) ; if(is_dir($file) ) $zip->add_dir($file) ; } $zip->file() ; } ?>
|