ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Есть ли такой скрипт
  #1  
Старый 08.03.2007, 06:50
Аватар для Vallez
Vallez
Участник форума
Регистрация: 25.12.2005
Сообщений: 151
Провел на форуме:
874713

Репутация: 53
По умолчанию Есть ли такой скрипт

Мне нужен скрипт для архивирования файла на сервере и передачи его через http.
 
Ответить с цитированием

  #2  
Старый 08.03.2007, 07:03
Аватар для zl0ba
zl0ba
Banned
Регистрация: 10.10.2006
Сообщений: 596
Провел на форуме:
2132613

Репутация: 1365


По умолчанию

PHP код:
<?php   

/*  

Zip file creation class  
makes zip files on the fly...  

use the functions add_dir() and add_file() to build the zip file;  
see example code below  

by Eric Mueller  
http://www.themepark.com  

v1.1 9-20-01  
  - added comments to example  

v1.0 2-5-01  

initial version with:  
  - class appearance  
  - add_file() and file() methods  
  - gzcompress() output hacking  
by Denis O.Philippov, webmaster@atlant.ru, http://www.atlant.ru  

*/   

// official ZIP file format: http://www.pkware.com/appnote.txt  

class zipfile    
{    

    var 
$datasec = array(); // array to store compressed data  
    
var $ctrl_dir = array(); // central directory     
    
var $eof_ctrl_dir "\x50\x4b\x05\x06\x00\x00\x00\x00"//end of Central directory record  
    
var $old_offset 0;   

    function 
add_dir($name)     

    
// adds "directory" to archive - do this before putting any files in directory!  
    // $name - name of directory... like this: "path/"  
    // ...then you can add files using add_file with names like "path/file.txt"  
    
{    
        
$name str_replace("\\""/"$name);    

        
$fr "\x50\x4b\x03\x04";   
        
$fr .= "\x0a\x00";    // ver needed to extract  
        
$fr .= "\x00\x00";    // gen purpose bit flag  
        
$fr .= "\x00\x00";    // compression method  
        
$fr .= "\x00\x00\x00\x00"// last mod time and date  

        
$fr .= pack("V",0); // crc32  
        
$fr .= pack("V",0); //compressed filesize  
        
$fr .= pack("V",0); //uncompressed filesize  
        
$fr .= pack("v"strlen($name) ); //length of pathname  
        
$fr .= pack("v"); //extra field length  
        
$fr .= $name;    
        
// end of "local file header" segment  

        // no "file data" segment for path  

        // "data descriptor" segment (optional but necessary if archive is not served as file)  
        
$fr .= pack("V",$crc); //crc32  
        
$fr .= pack("V",$c_len); //compressed filesize  
        
$fr .= pack("V",$unc_len); //uncompressed filesize  

        // add this entry to array  
        
$this -> datasec[] = $fr;   

        
$new_offset strlen(implode(""$this->datasec));   

        
// ext. file attributes mirrors MS-DOS directory attr byte, detailed  
        // at http://support.microsoft.com/support/kb/articles/Q125/0/19.asp  

        // now add to central record  
        
$cdrec "\x50\x4b\x01\x02";   
        
$cdrec .="\x00\x00";    // version made by  
        
$cdrec .="\x0a\x00";    // version needed to extract  
        
$cdrec .="\x00\x00";    // gen purpose bit flag  
        
$cdrec .="\x00\x00";    // compression method  
        
$cdrec .="\x00\x00\x00\x00"// last mod time & date  
        
$cdrec .= pack("V",0); // crc32  
        
$cdrec .= pack("V",0); //compressed filesize  
        
$cdrec .= pack("V",0); //uncompressed filesize  
        
$cdrec .= pack("v"strlen($name) ); //length of filename  
        
$cdrec .= pack("v"); //extra field length     
        
$cdrec .= pack("v"); //file comment length  
        
$cdrec .= pack("v"); //disk number start  
        
$cdrec .= pack("v"); //internal file attributes  
        
$ext "\x00\x00\x10\x00";   
        
$ext "\xff\xff\xff\xff";    
        
$cdrec .= pack("V"16 ); //external file attributes  - 'directory' bit set  

        
$cdrec .= pack("V"$this -> old_offset ); //relative offset of local header  
        
$this -> old_offset $new_offset;   

        
$cdrec .= $name;    
        
// optional extra field, file comment goes here  
        // save to array  
        
$this -> ctrl_dir[] = $cdrec;    

           
    }   


    function 
add_file($data$name)     

    
// adds "file" to archive     
    // $data - file contents  
    // $name - name of file in archive. Add path if your want  

    
{    
        
$name str_replace("\\""/"$name);    
        
//$name = str_replace("\\", "\\\\", $name);  

        
$fr "\x50\x4b\x03\x04";   
        
$fr .= "\x14\x00";    // ver needed to extract  
        
$fr .= "\x00\x00";    // gen purpose bit flag  
        
$fr .= "\x08\x00";    // compression method  
        
$fr .= "\x00\x00\x00\x00"// last mod time and date  

        
$unc_len strlen($data);    
        
$crc crc32($data);    
        
$zdata gzcompress($data);    
        
$zdata substrsubstr($zdata0strlen($zdata) - 4), 2); // fix crc bug  
        
$c_len strlen($zdata);    
        
$fr .= pack("V",$crc); // crc32  
        
$fr .= pack("V",$c_len); //compressed filesize  
        
$fr .= pack("V",$unc_len); //uncompressed filesize  
        
$fr .= pack("v"strlen($name) ); //length of filename  
        
$fr .= pack("v"); //extra field length  
        
$fr .= $name;    
        
// end of "local file header" segment  
           
        // "file data" segment  
        
$fr .= $zdata;    

        
// "data descriptor" segment (optional but necessary if archive is not served as file)  
        
$fr .= pack("V",$crc); //crc32  
        
$fr .= pack("V",$c_len); //compressed filesize  
        
$fr .= pack("V",$unc_len); //uncompressed filesize  

        // add this entry to array  
        
$this -> datasec[] = $fr;   

        
$new_offset strlen(implode(""$this->datasec));   

        
// now add to central directory record  
        
$cdrec "\x50\x4b\x01\x02";   
        
$cdrec .="\x00\x00";    // version made by  
        
$cdrec .="\x14\x00";    // version needed to extract  
        
$cdrec .="\x00\x00";    // gen purpose bit flag  
        
$cdrec .="\x08\x00";    // compression method  
        
$cdrec .="\x00\x00\x00\x00"// 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"); //extra field length     
        
$cdrec .= pack("v"); //file comment length  
        
$cdrec .= pack("v"); //disk number start  
        
$cdrec .= pack("v"); //internal file attributes  
        
$cdrec .= pack("V"32 ); //external file attributes - 'archive' bit set  

        
$cdrec .= pack("V"$this -> old_offset ); //relative offset of local header  
//        echo "old offset is ".$this->old_offset.", new offset is $new_offset<br>";  
        
$this -> old_offset $new_offset;   

        
$cdrec .= $name;    
        
// optional extra field, file comment goes here  
        // save to central directory  
        
$this -> ctrl_dir[] = $cdrec;    
    }   

    function 
file() { // dump out file     
        
$data implode(""$this -> datasec);    
        
$ctrldir implode(""$this -> ctrl_dir);    

        return     
            
$data.    
            
$ctrldir.    
            
$this -> eof_ctrl_dir.    
            
pack("v"sizeof($this -> ctrl_dir)).     // total # of entries "on this disk"  
            
pack("v"sizeof($this -> ctrl_dir)).     // total # of entries overall  
            
pack("V"strlen($ctrldir)).             // size of central dir  
            
pack("V"strlen($data)).                 // offset to start of central dir  
            
"\x00\x00";                             // .zip file comment length  
    
}   
}    

?> 

/* example */ 

<?php    

$zipfile 
= new zipfile();    

// add the subdirectory ... important!  
$zipfile -> add_dir("dir/");   

// add the binary data stored in the string 'filedata'  
$filedata "(read your file into $filedata)";    
$zipfile -> add_file($filedata"dir/file.txt");    

// the next three lines force an immediate download of the zip file:  
header("Content-type: application/octet-stream");    
header("Content-disposition: attachment; filename=test.zip");    
echo 
$zipfile -> file();    


// OR instead of doing that, you can write out the file to the loca disk like this:  
$filename "output.zip";  
$fd fopen ($filename"wb");  
$out fwrite ($fd$zipfile -> file());  
fclose ($fd);  

// then offer it to the user to download:  
<a href="output.zip">Click here to download the new zip file.</a>  

?>
 
Ответить с цитированием

  #3  
Старый 08.03.2007, 07:30
Аватар для Vallez
Vallez
Участник форума
Регистрация: 25.12.2005
Сообщений: 151
Провел на форуме:
874713

Репутация: 53
По умолчанию

Че то непашет.
 
Ответить с цитированием

  #4  
Старый 08.03.2007, 08:54
Аватар для DIAgen
DIAgen
Познавший АНТИЧАТ
Регистрация: 02.05.2006
Сообщений: 1,191
Провел на форуме:
7364332

Репутация: 1276


По умолчанию

Цитата:
Сообщение от Vallez  
Че то непашет.
Этот класс нормально работает, просто разберись нормально как им пользоваться!
 
Ответить с цитированием

  #5  
Старый 08.03.2007, 11:37
Аватар для DRON-ANARCHY
DRON-ANARCHY
Отец порядка
Регистрация: 04.03.2005
Сообщений: 1,007
Провел на форуме:
1204641

Репутация: 412


Отправить сообщение для DRON-ANARCHY с помощью ICQ
По умолчанию

а если через командную строку архивировать?
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Брутфорс - начинающим bxN5 ICQ 30 29.12.2008 05:08
секреты и коды для сотовых телефонов ))) dinar_007 Сотовый фрикинг 32 05.08.2006 17:06
Что ломать? Almight Чаты 3 09.02.2004 18:48
Немного о чате на www.a-chat.by.ru катерина Чаты 1 27.06.2002 11:32



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ