Avatar billede fixbabe Nybegynder
17. januar 2006 - 21:19 Der er 22 kommentarer og
1 løsning

unzip til dir via php

Jeg mangler et script der kan unzippe en .zip fil til et dir jeg bestemmer. Hvis det var muligt at få lavet en status indikator som viser hvor langt den er med udpakningen, der er tale om en zip fil kun og ikke flere så jeg kender størrelsen hvis det kunne hjælpe.
Avatar billede coderdk Praktikant
17. januar 2006 - 21:52 #1
Du kan vel skrive ud hvilken den er i gang med?

<html>
    <head>
        <title>Extracting</title>
    </head>
    <body>
<?php

    $error = array();
    if ( $zip = zip_open( 'fil.zip' ) )
    {
        while ( $zipfil = zip_read( $zip ) )
        {
            print "Extracting <b>" . zip_entry_name( $zip_entry ) . "</b> "
                . zip_entry_compressedsize( $zip_entry ) . " bytes...\n";
            flush();
            if ( zip_entry_open( $zip, $zipfil, 'r' ) )
            {
                if ( $fp = fopen( zip_entry_name( $zip_entry ), 'wb' ) )
                {
                    $buf = zip_entry_read( $zipfil, zip_entry_filesize( $zip_entry ) );
                    fwrite( $fp, $buf );
                    fclose( $fp );
                    print "OK!<br>\n";
                    flush();
                }
                else
                {
                    print "Fejl!<br>\n";
                }
              zip_entry_close( $zipfil );
            }
        }
        zip_close($zip);
    }

?>
        <br>
        <b>Done!</b>
    </body>
</html>
Avatar billede coderdk Praktikant
17. januar 2006 - 21:53 #2
Doh! Der var et par fejl:

<html>
    <head>
        <title>Extracting</title>
    </head>
    <body>
<?php

    $error = array();
    if ( $zip = zip_open( 'fil.zip' ) )
    {
        while ( $zipfil = zip_read( $zip ) )
        {
            print "Extracting <b>" . zip_entry_name( $zipfil ) . "</b> "
                . zip_entry_compressedsize( $zipfil ) . " bytes...\n";
            flush();
            if ( zip_entry_open( $zip, $zipfil, 'r' ) )
            {
                if ( $fp = fopen( zip_entry_name( $zipfil ), 'wb' ) )
                {
                    $buf = zip_entry_read( $zipfil, zip_entry_filesize( $zipfil ) );
                    fwrite( $fp, $buf );
                    fclose( $fp );
                    print "OK!<br>\n";
                    flush();
                }
                else
                {
                    print "Fejl!<br>\n";
                }
              zip_entry_close( $zipfil );
            }
        }
        zip_close($zip);
    }

?>
        <br>
        <b>Done!</b>
    </body>
</html>
Avatar billede pidgeot Nybegynder
17. januar 2006 - 21:53 #3
Bemærk dog at det script afhænger af et PHP-modul der ikke er aktiveret som standard. Det er ikke sikkert du har mulighed for at aktivere det på din server.
Avatar billede coderdk Praktikant
17. januar 2006 - 21:58 #4
Det er korrekt hvad pidgeot skriver. Der findes dog nogle zip-klasser i ren PHP som ikke kræver zip er aktiveret i php :)
Avatar billede fixbabe Nybegynder
17. januar 2006 - 22:22 #5
coderdk hva mener du?

hvor kan jeg vælge den "mappe/sti" hvor den skal pakke filen ud til?
Avatar billede coderdk Praktikant
17. januar 2006 - 22:23 #6
if ( $fp = fopen( zip_entry_name( $zipfil ), 'wb' ) )

http://dk.php.net/fopen

Altså hvis du ville pakke ud i "test":

if ( $fp = fopen( 'test/' . zip_entry_name( $zipfil ), 'wb' ) )
Avatar billede fixbabe Nybegynder
17. januar 2006 - 23:04 #7
Det virker ikke... har chmod'et mappen test til 777 osv men får bare "fejl"

Er det muligt at lavet et script der kan slette den mappe man vælger hvorefter den pakker filen ud til mappen ?
Avatar billede coderdk Praktikant
17. januar 2006 - 23:14 #8
Kommer der ingen anden fejlmelding?
Avatar billede alleykat Nybegynder
18. januar 2006 - 01:40 #9
http://phpfm.sourceforge.net/ du kunne ikke bruge et færdigt script i stedet? (Man skal nu være forsigtig med den slags - en mappe bør f.eks. ikke være '777' uden en god grund...)
Avatar billede fixbabe Nybegynder
18. januar 2006 - 16:18 #10
Alleykat det er ikke lige sådan noget som det du henviser til jeg skal bruge.
Avatar billede fixbabe Nybegynder
18. januar 2006 - 17:31 #11
coderdk jeg får følgende besked:

Extracting ssserver/winclient/skin/skin.cfg 680 bytes... Fejl!
Extracting ssserver/winclient/skin/ssclient.ico 1477 bytes... Fejl!
Extracting ssserver/winclient/ssc.exe 335253 bytes... Fejl!

Done!
Avatar billede coderdk Praktikant
18. januar 2006 - 20:44 #12
Ok, findes ssserver/winclient/skin stien, og er den skrivbar hele vejen igennem?
Avatar billede fixbabe Nybegynder
18. januar 2006 - 21:02 #13
nej for det er jo det den skal pakke ud. det er ikke kun en fil den skal pakke ud men en masse mapper også
Avatar billede coderdk Praktikant
18. januar 2006 - 21:08 #14
Prøv med:

<html>
    <head>
        <title>Extracting</title>
    </head>
    <body>
<?php

    function forceDir( $path )
    {
        // Recursively create directories
        if ( file_exists( $path ) )
        {
            return 1;
        }
        if ( forceDir( dirname( $path ) ) )
        {
            return mkdir( $path );
        }
        else
        {
            return 0;
        }
    }

    if ( $zip = zip_open( 'fil.zip' ) )
    {
        while ( $zipfil = zip_read( $zip ) )
        {
            print "Extracting <b>" . zip_entry_name( $zipfil ) . "</b> "
                . zip_entry_compressedsize( $zipfil ) . " bytes...\n";
            flush();
            if ( zip_entry_open( $zip, $zipfil, 'r' ) )
            {
                $target = zip_entry_name( $zipfil );
                if ( forceDir( dirname( $target ) ) && $fp = fopen( $target, 'wb' ) )
                {
                    $buf = zip_entry_read( $zipfil, zip_entry_filesize( $zipfil ) );
                    fwrite( $fp, $buf );
                    fclose( $fp );
                    print "OK!<br>\n";
                    flush();
                }
                else
                {
                    print "Fejl!<br>\n";
                }
              zip_entry_close( $zipfil );
            }
        }
        zip_close($zip);
    }

?>
        <br>
        <b>Done!</b>
    </body>
</html>
Avatar billede fixbabe Nybegynder
18. januar 2006 - 21:26 #15
Extracting ssserver/ 0 bytes... OK!
Extracting ssserver/.bashrc 98 bytes... Fejl!
Extracting ssserver/.bash_logout 182 bytes... Fejl!
Extracting ssserver/.bash_profile 154 bytes... Fejl!
Extracting ssserver/.emacs 255 bytes... Fejl!
Extracting ssserver/.steam/ 0 bytes... Fejl!
Extracting ssserver/.steam/ClientRegistry.blob 656 bytes... Fejl!
Extracting ssserver/.zshrc 394 bytes... Fejl!
Extracting ssserver/banner.jpg 1764 bytes... Fejl!
Extracting ssserver/banner.jpg3 4224 bytes... Fejl!
Extracting ssserver/banner.jpgorg 5081 bytes... Fejl!


Nu får jeg ok ved den første
Avatar billede coderdk Praktikant
18. januar 2006 - 21:32 #16
Hmm den ser underlig ud - Som om den første entry er et tomt bibliotek? Kan du prøve med den fra før; den med "Extracting ssserver/winclient/skin/skin.cfg" i?
Avatar billede coderdk Praktikant
18. januar 2006 - 21:32 #17
Glemte at spørge om den oprettede ssserver-folderen?
Avatar billede fixbabe Nybegynder
18. januar 2006 - 21:34 #18
den opretter en fil med navnet men ikke en mappe..
Avatar billede fixbabe Nybegynder
23. januar 2006 - 20:46 #19
? stopper vi her?
Avatar billede coderdk Praktikant
23. januar 2006 - 21:03 #20
hehe well, jeg kan ikke lige overskue hvorfor den laver folderen som en fil, og ikke kommer med andre fejl...
Avatar billede fixbabe Nybegynder
23. januar 2006 - 21:10 #21
kan det være pga den mappe den laver ikke er skrivebar?
Avatar billede coderdk Praktikant
23. januar 2006 - 22:07 #22
Det burde den være. Mode i mkdir() er 0777 som default, svjh. Men du kan da prøve at ændre mkdir( $path ); til mkdir( $path, 0777 );
Avatar billede fixbabe Nybegynder
30. april 2006 - 00:09 #23
Fik aldrig en brugbar løsning så jeg lukker
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