Avatar billede supermand69 Nybegynder
18. oktober 2006 - 19:56 Der er 7 kommentarer og
1 løsning

pakke dir i fil

hvordan er det muligt at pakke et dir + subdirs i en fil?
Avatar billede coderdk Praktikant
19. oktober 2006 - 01:19 #1
http://dk.php.net/tar <- Første comment, Tar_by_Vladson kan gøre det, bemærk at den ikke komprimerer det, så skal du efterfølgende bruge gzip http://dk.php.net/gzip.
Det er hvis du ikke har command-line adgang, hvis du har, og web-brugeren har lov, kan du køre "tar czvf dir.tar.gz dir" gennem f.eks. exec()
Avatar billede supermand69 Nybegynder
19. oktober 2006 - 15:58 #2
jeg ser lidt på Tar_by_Vladson, men det næste link virker ikke

en anden ting.. hvor mange formater kan man gemme lagre sine filer og mapper i? jeg tænker på tar, zip osv
Avatar billede coderdk Praktikant
19. oktober 2006 - 16:15 #3
Sorry, linket er naturligvis http://dk.php.net/zlib

Well, principielt alt hvad der er command line til - Hvis du vel at mærke kører det igennem f.eks. exec(), der er også zip: http://dk.php.net/zip
Avatar billede supermand69 Nybegynder
19. oktober 2006 - 16:26 #4
hvad er så "bedst" af tar og zip?

er der noget med dybde med hensyn til subdirs, tegn i fil og mappe navn osv?
Avatar billede supermand69 Nybegynder
19. oktober 2006 - 21:35 #5
Jeg har nu siddet hele dagen og forsøgt at omskrive scriptet, så jeg selv kan forstå hvad det helt præcist er der sker. For er ikke meget for bare at anvende et copy/paste script. Får man jo ikke særlig meget ud af :)

Jeg er kommet frem til at tar filer er opdelt i hele blokke (512bytes).. korrekt? :)

Jeg forstår for så vidt hvad der sker i mine funktioner backup() og file_list(), men hvad der sker i header_block() er jeg lidt i tvivl om

Det jeg så er lidt i tvivl om er:

sprintf('%6s ', decoct($info['mode']))

ord(substr($header, $i, 1))

Her er mit omskrevne script:
<?
function backup($tar_file = '../backup.tar')
{
    $fp = fopen($tar_file, 'wb');
   
    foreach(file_list() as $pathfile)
    {
        if(substr($pathfile, -1, 1) == '/') fwrite($fp, header_block($pathfile));
        else
        {
            $filesize = filesize($pathfile);
            $block_len = 512 * ceil($filesize / 512) - $filesize;
           
            fwrite($fp, header_block($pathfile));
            fwrite($fp, file_get_contents($pathfile));
            fwrite($fp, pack('a'.$block_len, ''));
        }
    }
   
    fwrite($fp, pack('a512', ''));
    fclose($fp);
}

function file_list($dir = '.')
{
    $handle = opendir($dir);
    while(false !== ($readdir = readdir($handle)))
    {
        if($readdir != '.' && $readdir != '..')
        {
            $path = $dir.'/'.$readdir;
           
            if(is_dir($path))
            {
                $file_arr[] = substr($path, 2, strlen($path)).'/';
                $file_arr = array_merge($file_arr, file_list($path));
            }
            else $file_arr[] = substr($path, 2, strlen($path));
        }
    }
   
    closedir($handle);
   
    return $file_arr;
}

function header_block($pathfile)
{
    if(strlen($pathfile) > 99 ) die('Error');
   
    $info = stat($pathfile);
    if(substr($pathfile, -1, 1) == '/') $info['size'] = 0;
   
    $header = pack(
        'a100a8a8a8a12A12a8a1a100a255',
        $pathfile,
        sprintf('%6s ', decoct($info['mode'])),
        sprintf('%6s ', decoct($info['uid'])),
        sprintf('%6s ', decoct($info['gid'])),
        sprintf('%11s ', decoct($info['size'])),
        sprintf('%11s', decoct($info['mtime'])),
        sprintf('%8s', ' '),
        (is_dir($pathfile) ? '5' : '0'),
        '',
        ''
    );
   
    clearstatcache();
   
    $checksum = 0;
    for($i=0; $i<512; $i++) $checksum += ord(substr($header, $i, 1));
   
    $checksum_data = pack(
        'a8',
        sprintf('%6s ', decoct($checksum))
    );
   
    for($i=0, $j=148; $i<7; $i++, $j++) $header[$j] = $checksum_data[$i];
   
    return $header;
}

header('Content-type: text/plain');
$start_time = microtime();
backup();
$finish_time = microtime();
printf("The time taken: %f seconds", ($finish_time - $start_time));
?>
Avatar billede supermand69 Nybegynder
25. oktober 2006 - 19:50 #6
lav et svar
Avatar billede coderdk Praktikant
25. oktober 2006 - 23:06 #7
Ellers tak, snup dem selv :)
Avatar billede supermand69 Nybegynder
26. oktober 2006 - 15:56 #8
:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Riskpoint A/S (Riskpoint Solutions Limited)

IT Business Analyst

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Solution Manager til Cyberdivisionen

Forsvarets Efterretningstjeneste

IT-direktør til Forsvarets Efterretningstjeneste