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.
Annonceindlæg fra Novataris
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>
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>
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.
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 :)
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?
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' ) )
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 ?
17. januar 2006 - 23:14
#8
Kommer der ingen anden fejlmelding?
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...)
18. januar 2006 - 16:18
#10
Alleykat det er ikke lige sådan noget som det du henviser til jeg skal bruge.
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!
18. januar 2006 - 20:44
#12
Ok, findes ssserver/winclient/skin stien, og er den skrivbar hele vejen igennem?
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å
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>
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
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?
18. januar 2006 - 21:32
#17
Glemte at spørge om den oprettede ssserver-folderen?
18. januar 2006 - 21:34
#18
den opretter en fil med navnet men ikke en mappe..
23. januar 2006 - 20:46
#19
? stopper vi her?
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...
23. januar 2006 - 21:10
#21
kan det være pga den mappe den laver ikke er skrivebar?
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 );
30. april 2006 - 00:09
#23
Fik aldrig en brugbar løsning så jeg lukker
Vi tilbyder markedets bedste kurser inden for webudvikling