[php] unzip

quicksilver

Lt. Junior Grade
Registriert
Jan. 2004
Beiträge
363
Ich habe vor ein verzeichnis zu listen und per klick eine datei die sich dort als zip befindet zu entpacken aber irgendwie tut er das nicht. Könnte mir da wer helfen ?

Danke

PHP:
<?php


if ($zip=="ok") {
		echo $zipfile = $_SERVER['DOCUMENT_ROOT']."/".$datei;
		echo"<br>";
		echo $des     = $_SERVER['DOCUMENT_ROOT'];
		system("unzip -o $zipfile -d $des", $ret_val);
		echo "<pre>".$ret_val."</pre>";
		echo ("<br><font color=\"#FF0000\">Datei wurde erfolgreich entpackt</font>");
		echo "<META HTTP-EQUIV=Refresh CONTENT=\"4; URL=". $_SERVER[PHP_SELF] ."\">";
		exit(); 

}

if ($dir = @opendir("./")) {
  while (($file = readdir($dir)) !== false) {

    if (strstr($file, '.zip') <> "") {
            echo "<A HREF=\"$file\">$file</A> <a href=\"". $_SERVER[PHP_SELF] ."?datei=$file&zip=ok\"><font color=\"#00FF00\">Unzip</font></a> ";
            echo "<a href=\"". $_SERVER[PHP_SELF] ."?datei=$file&loeschen=ok\"><font color=\"#FF0000\">löschen</font></a><br>";
        }
  }
  closedir($dir);
}

?>
 
Hi,

hat der PHP-Server das Recht, "unzip" auszuführen? Wenn nicht, mußt du das ändern. Einfach mit chmod die Rechte setzen. Vielleicht auch mit Hilfe von ACL.

Gruß, Gobble-G

PS: Das "!==" ist wohl nicht gemeint, schreib "!=".
 
Zuletzt bearbeitet:
Es geht irgendwie nicht keine ahnung warum. Chmod ist auf 777 aber tut sich nichts :(

PHP:
<?php

if ($zip=="ok") {
		echo $zipfile = dirname($_SERVER["SCRIPT_FILENAME"])."/".$datei;
		echo"<br>";
		echo $des     = dirname($_SERVER["SCRIPT_FILENAME"])."/";
		//system("unzip -o $zipfile -d $des", $ret_val);		 
		exec("unzip $datei", $ret_val);		 
		echo "<pre>".$ret_val['1']."</pre>";
		echo ("<br><font color=\"#FF0000\">Datei wurde erfolgreich entpackt</font>");
		echo "<META HTTP-EQUIV=Refresh CONTENT=\"4; URL=". $_SERVER[PHP_SELF] ."\">";
		exit(); 

}

if ($dir = @opendir("./")) {
  while (($file = readdir($dir)) != false) {

    if (strstr($file, '.zip') <> "") {
            echo "<A HREF=\"$file\">$file</A> <a href=\"". $_SERVER[PHP_SELF] ."?datei=$file&zip=ok\"><font color=\"#00FF00\">Unzip</font></a> ";
            echo "<a href=\"". $_SERVER[PHP_SELF] ."?datei=$file&loeschen=ok\"><font color=\"#FF0000\">löschen</font></a><br>";
        }
  }
  closedir($dir);
}

?>
 
Zuletzt bearbeitet:
Was passiert denn überhaupt? Fehlermeldung?
 
Hallo!

Benutze doch die Klasse "PclZip". Damit habe ich es hinbekommen!

Download unter http://www.phpconcept.net/pclzip/ .

Beispielcode (nach deiner Datei:)

PHP:
<?php

require_once('pclzip.lib.php');

if (isset($_GET['zip']) && $_GET['zip']=="ok") {

		  $targetdir=preg_replace ( "=\.zip=i" , "" , $_GET['datei'] );
		 // mkdir ( $targetdir );
        $archive = new PclZip ( $_GET['datei'] );
		  if ($archive->extract(PCLZIP_OPT_PATH, $targetdir) == 0) {
			 die("Error : ".$archive->errorInfo(true));
		  }
        echo "<pre>".$ret_val['1']."</pre>";
        echo ("<br><font color=\"#FF0000\">Datei wurde erfolgreich entpackt</font>");
        echo "<META HTTP-EQUIV=Refresh CONTENT=\"4; URL=". $_SERVER['PHP_SELF'] ."\">";
        exit();

}

if ($dirname = opendir(".")) {
  while ($filename = readdir($dirname)) {

    if (preg_match("=\.zip$=i",$filename)) {
            echo "<A HREF=\"".$filename."\">".$filename."</A> <a href=\"". $_SERVER['PHP_SELF'] ."?datei=".$filename."&zip=ok\"><font color=\"#00FF00\">Unzip</font></a> ";
            echo "<a href=\"". $_SERVER['PHP_SELF'] ."?datei=".$filename."&loeschen=ok\"><font color=\"#FF0000\">löschen</font></a><br>";
        }
  }
  closedir($dirname);
}

?>
 
Noch eine Frage zu opendir habe ich. Ich habe da ja abgefragt if (preg_match("=\.zip$=i",$filename)) um eine zip datei zu filtern aber wie gebe ich ein verzeichnis aus ? Bzw lasse das anzeigen ?
 
Hallo!

Man kann in der while-Schleife auch abfragen, ob die "Datei" ein Ordner ist.
Und zwar mit der Funktion is_dir( string filename ). Diese gibt, falls es sich um einen Ordner handelt, true oder, falls nicht, false als Wert zurück.

Also z.B.:
PHP:
<?php
while ( $filename = readdir($dirname) )
{
/* Hier nun die Abfrage, ob es ein Ordner ist */
if ( is_dir ( $filename ) ) { /* ... */ }
}
?>
 
Ok danke euch. Geht soweit alles. Nur wollte ich nun eigentlich alles in einer datei haben. Aber die funktion von http://www.phpconcept.net ist über 200k gross hat daher jemand noch eine "kleine" unzip möglichkeit?

*update*

Ich habe es nun hiermit probiert aber da kennt er komischerweise die zip_open funktion nicht :(

PHP:
    $zip = zip_open('dir.zip'); //open POST DATA
    while($zip_entry = zip_read($zip))
    {		
    zip_entry_open($zip,$zip_entry,"rb");
    //get Entry Info
    $filename = zip_entry_name($zip_entry);	
    $zip_entry_size = zip_entry_filesize($zip_entry);
    //readin Entry Data
    $filestring = zip_entry_read($zip_entry,$zip_entry_size);
    //create new file
    $file = fopen("","wb");
    fwrite($file,$filestring);
    fclose($file);
    zip_entry_close($zip_entry);
    }
    zip_close($zip);
 
Zuletzt bearbeitet:
Ja, die zip_open()-Funktion funktioniert bei mir auf Hostpoint.ch-Webspace leider auch nicht, sonst hätte ich sie dir direkt unterbreitet. Dazu muss -- glaube ich -- ZipLib oder so etwas ähnlich klingendes als Modul installiert sein, was aber eher selten der Fall ist.

Du wirst also leider nicht um diese Datei herumkommen, schätze ich. Außerdem muss diese ja nicht verändert werden, einmal hochgeladen und anschließend nur noch per include() oder require[_once]() eingebunden.
 
Zurück
Oben