Oprettet tir. d. 17. januar 2006 kl. 21:19:25

fixbabe
fixbabe (9.177 point. Point ude: 0)

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.

Skrevet tir. d. 17. januar 2006 kl. 21:52:28| #1

coderdk
coderdk (160.399 point)
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>

Skrevet tir. d. 17. januar 2006 kl. 21:53:10| #2

coderdk
coderdk (160.399 point)
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>

Skrevet tir. d. 17. januar 2006 kl. 21:53:36| #3

pidgeot
pidgeot (51.189 point)
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.

Skrevet tir. d. 17. januar 2006 kl. 21:58:46| #4

coderdk
coderdk (160.399 point)
Det er korrekt hvad pidgeot skriver. Der findes dog nogle zip-klasser i ren PHP som ikke kræver zip er aktiveret i php :)

Skrevet tir. d. 17. januar 2006 kl. 22:22:01| #5

fixbabe
fixbabe (9.177 point)
coderdk hva mener du?

hvor kan jeg vælge den "mappe/sti" hvor den skal pakke filen ud til?

Skrevet tir. d. 17. januar 2006 kl. 22:23:44| #6

coderdk
coderdk (160.399 point)
if ( $fp = fopen( zip_entry_name( $zipfil ), 'wb' ) )

http://dk.php.net/ (...)

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

if ( $fp = fopen( 'test/' . zip_entry_name( $zipfil ), 'wb' ) )

Skrevet tir. d. 17. januar 2006 kl. 23:04:25| #7

fixbabe
fixbabe (9.177 point)
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 ?

Skrevet tir. d. 17. januar 2006 kl. 23:14:15| #8

coderdk
coderdk (160.399 point)
Kommer der ingen anden fejlmelding?

Skrevet ons. d. 18. januar 2006 kl. 01:40:00| #9

alleykat
alleykat (21.956 point)
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...)

Skrevet ons. d. 18. januar 2006 kl. 16:18:10| #10

fixbabe
fixbabe (9.177 point)
Alleykat det er ikke lige sådan noget som det du henviser til jeg skal bruge.

Skrevet ons. d. 18. januar 2006 kl. 17:31:33| #11

fixbabe
fixbabe (9.177 point)
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!

Skrevet ons. d. 18. januar 2006 kl. 20:44:13| #12

coderdk
coderdk (160.399 point)
Ok, findes ssserver/winclient/skin stien, og er den skrivbar hele vejen igennem?

Skrevet ons. d. 18. januar 2006 kl. 21:02:38| #13

fixbabe
fixbabe (9.177 point)
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å

Skrevet ons. d. 18. januar 2006 kl. 21:08:39| #14

coderdk
coderdk (160.399 point)
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>

Skrevet ons. d. 18. januar 2006 kl. 21:26:27| #15

fixbabe
fixbabe (9.177 point)
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

Skrevet ons. d. 18. januar 2006 kl. 21:32:19| #16

coderdk
coderdk (160.399 point)
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?

Skrevet ons. d. 18. januar 2006 kl. 21:32:38| #17

coderdk
coderdk (160.399 point)
Glemte at spørge om den oprettede ssserver-folderen?

Skrevet ons. d. 18. januar 2006 kl. 21:34:35| #18

fixbabe
fixbabe (9.177 point)
den opretter en fil med navnet men ikke en mappe..

Skrevet man. d. 23. januar 2006 kl. 20:46:01| #19

fixbabe
fixbabe (9.177 point)
? stopper vi her?

Skrevet man. d. 23. januar 2006 kl. 21:03:40| #20

coderdk
coderdk (160.399 point)
hehe well, jeg kan ikke lige overskue hvorfor den laver folderen som en fil, og ikke kommer med andre fejl...

Skrevet man. d. 23. januar 2006 kl. 21:10:31| #21

fixbabe
fixbabe (9.177 point)
kan det være pga den mappe den laver ikke er skrivebar?

Skrevet man. d. 23. januar 2006 kl. 22:07:30| #22

coderdk
coderdk (160.399 point)
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 );

Skrevet søn. d. 30. april 2006 kl. 00:09:17| #23

fixbabe
fixbabe (9.177 point)
Fik aldrig en brugbar løsning så jeg lukker

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Brugerliste med link til profil

Oprettet den 26. maj 2012 kl. 14.29
sayn giver 30 point for svar | Giv et svar »

php curl driller

Oprettet den 26. maj 2012 kl. 08.31
PHPnQrd giver 200 point for svar | Giv et svar »

Array i array

Oprettet den 25. maj 2012 kl. 08.32
sebster giver 60 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger