Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: создание архивов на php

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
php_su
Отправлено: 30 Августа, 2008 - 14:59:53
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2008  


Помог: 0 раз(а)




Здравствуйте!
передо мной стоит задачка такая.... Растерялся нетривиальная...

сделать программу, которая по команде юзера делала бы множество архивов, разного размера. внутри архива должна быть моя папка, +файл какой-нибудь, чтобы он был разный по содержанию. допустим в первом архиве папка+файл 1кб, во втором архиве папка+файл 2кб... и тд... как такое сделать? ума не приложу Огорчение
 
 Top
A.St.
Отправлено: 31 Августа, 2008 - 18:44:57
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Июль 2008  


Помог: 0 раз(а)




Узнать, какая ОС на сервере и послать ей команду создания архива.
Z.B. создание Тар на Линукс:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. // команда ОС
  3. $command = "tar -cvf ".$tar_path.$tar_name." ".$tar_path;
  4. // вызов exec
  5. $process = exec( $command);
  6.  
 
 Top
php_su
Отправлено: 01 Сентября, 2008 - 10:28:38
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2008  


Помог: 0 раз(а)




ОС винда
что такое "создание Тар"?
и как это самое Тар может делать все архивы разного размера?
 
 Top
Champion Супермодератор
Отправлено: 02 Сентября, 2008 - 11:29:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




tar - это *nix-овый архиватор. В винде такая команда не прокатит.
Я для создания ZIP-ов этим пользуюсь:
сама фунция внизу. Просто сохраняешь это в отдельный файл, инклюдишь его, вызываешь append_to_zip($in_files, $arc_file, $compress) и всё! только переменные не забудь определить
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. class zipfile
  4. {
  5.         var $filename;
  6.         var $ctrl_dir  =  array() ;
  7.         var $eof_ctrl_dir  =  "\x50\x4b\x05\x06\x00\x00\x00\x00";
  8.         var $old_offset  =  0;
  9.  
  10.         function add_dir($name)
  11.         {
  12.                 $name  =  str_replace("\\",  "/",  $name) ;
  13.                 $fr  =  "\x50\x4b\x03\x04";
  14.                 $fr .=  "\x0a\x00";
  15.                 $fr .=  "\x00\x00";
  16.                 $fr .=  "\x00\x00";
  17.                 $fr .=  "\x00\x00\x00\x00";
  18.  
  19.                 $fr .=  pack("V", 0) ;
  20.                 $fr .=  pack("V", 0) ;
  21.                 $fr .=  pack("V", 0) ;
  22.                 $fr .=  pack("v",  strlen($name)  ) ;
  23.                 $fr .=  pack("v",  0 ) ;
  24.                 $fr .=  $name;
  25.                 $fr .=  pack("V",  0) ;
  26.                 $fr .=  pack("V",  0) ;
  27.                 $fr .=  pack("V",  0) ;
  28.  
  29.                 $f  =  fopen($this->filename, "a+") ;
  30.                 fwrite($f, $fr) ;
  31.                 fclose($f) ;
  32.  
  33.                 $new_offset  =  filesize($this->filename) ;
  34.  
  35.                 $cdrec  =  "\x50\x4b\x01\x02";
  36.                 $cdrec .= "\x00\x00";
  37.                 $cdrec .= "\x0a\x00";
  38.                 $cdrec .= "\x00\x00";
  39.                 $cdrec .= "\x00\x00";
  40.                 $cdrec .= "\x00\x00\x00\x00";
  41.                 $cdrec .=  pack("V", 0) ;
  42.                 $cdrec .=  pack("V", 0) ;
  43.                 $cdrec .=  pack("V", 0) ;
  44.                 $cdrec .=  pack("v",  strlen($name)  ) ;
  45.                 $cdrec .=  pack("v",  0 ) ;
  46.                 $cdrec .=  pack("v",  0 ) ;
  47.                 $cdrec .=  pack("v",  0 ) ;
  48.                 $cdrec .=  pack("v",  0 ) ;
  49.                 $ext  =  "\x00\x00\x10\x00";
  50.                 $ext  =  "\xff\xff\xff\xff";
  51.                 $cdrec .=  pack("V",  16 ) ;
  52.                 $cdrec .=  pack("V",  $this -> old_offset ) ;
  53.                 $cdrec .=  $name;
  54.  
  55.                 $this -> ctrl_dir[]  =  $cdrec;
  56.                 $this -> old_offset  =  $new_offset;
  57.                 return;
  58.         }
  59.  
  60.         function add_file($data,  $name,  $compression  =  6)
  61.         {
  62.                 $name  =  str_replace("\\",  "/",  $name) ;
  63.                 $unc_len  =  strlen($data) ;
  64.                 $crc  =  crc32($data) ;
  65.                 $zdata  =  gzcompress($data,  $compression) ;
  66.                 $zdata  =  substr ($zdata,  2,  -4) ;
  67.                 $c_len  =  strlen($zdata) ;
  68.  
  69.                 $fr  =  "\x50\x4b\x03\x04";
  70.                 $fr .=  "\x14\x00";
  71.                 $fr .=  "\x00\x00";
  72.                 $fr .=  "\x08\x00";
  73.                 $fr .=  "\x00\x00\x00\x00";
  74.                 $fr .=  pack("V", $crc) ;
  75.                 $fr .=  pack("V", $c_len) ;
  76.                 $fr .=  pack("V", $unc_len) ;
  77.                 $fr .=  pack("v",  strlen($name)  ) ;
  78.                 $fr .=  pack("v",  0 ) ;
  79.                 $fr .=  $name;
  80.                 $fr .=  $zdata;
  81.                 $fr .=  pack("V", $crc) ;
  82.                 $fr .=  pack("V", $c_len) ;
  83.                 $fr .=  pack("V", $unc_len) ;
  84.  
  85.                 $f  =  fopen($this->filename, "a+") ;
  86.                 fwrite($f, $fr) ;
  87.                 fclose($f) ;
  88.  
  89.                 $new_offset  =  filesize($this->filename) ;
  90.  
  91.                 $cdrec  =  "\x50\x4b\x01\x02";
  92.                 $cdrec .= "\x00\x00";
  93.                 $cdrec .= "\x14\x00";
  94.                 $cdrec .= "\x00\x00";
  95.                 $cdrec .= "\x08\x00";
  96.                 $cdrec .= "\x00\x00\x00\x00";
  97.                 $cdrec .=  pack("V", $crc) ;
  98.                 $cdrec .=  pack("V", $c_len) ;
  99.                 $cdrec .=  pack("V", $unc_len) ;
  100.                 $cdrec .=  pack("v",  strlen($name)  ) ;
  101.                 $cdrec .=  pack("v",  0 ) ;
  102.                 $cdrec .=  pack("v",  0 ) ;
  103.                 $cdrec .=  pack("v",  0 ) ;
  104.                 $cdrec .=  pack("v",  0 ) ;
  105.                 $cdrec .=  pack("V",  32 ) ;
  106.                 $cdrec .=  pack("V",  $this -> old_offset ) ;
  107.  
  108.                 $this -> old_offset  =  $new_offset;
  109.  
  110.                 $cdrec .=  $name;
  111.                 $this -> ctrl_dir[]  =  $cdrec;
  112.         }
  113.  
  114.         function file()
  115.         {
  116.                 $ctrldir  =  implode("",  $this -> ctrl_dir) ;
  117.                 $datasize  =  filesize($this->filename) ;
  118.                 $f  =  fopen($this->filename, "a+") ;
  119.                 fwrite($f, $ctrldir.
  120.                                         $this -> eof_ctrl_dir.
  121.                                         pack("v",  sizeof($this -> ctrl_dir) ) .
  122.                                         pack("v",  sizeof($this -> ctrl_dir) ) .
  123.                                         pack("V",  strlen($ctrldir) ) .
  124.                                         pack("V",  $datasize) ."\x00\x00") ;
  125.                 fclose($f) ;
  126.         }
  127.  
  128. }
  129. //******************************************
  130. //$in_files - массив имен файлов, которые мы арх-ем
  131. // $arc_file - имя получившегося архива
  132. // $compress - степень сжатия. до 9
  133. ///////////////////////
  134. function append_to_zip($in_files, $arc_file, $compress)
  135. {
  136.         $zip  =  new zipfile();
  137.         if (file_exists($arc_file))
  138.                 unlink($arc_file);
  139.         $zip->filename  =  $arc_file;
  140.         for ($i = 0; !is_null($in_files[$i]); $i++) {
  141.                 $file  =  $in_files[$i];
  142.                 $src_file  =  fopen($file , 'rb') ;
  143.                 $compression  =  $compress;
  144.                 $zip->add_file(fread($src_file, 30000000) ,  $file,  $compression) ;
  145.                 if(is_dir($file) )  $zip->add_dir($file) ;
  146.         }
  147.         $zip->file() ;
  148.         fclose($src_file);
  149. }
  150.  
  151. ?>
  152.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB