Hallo,
ich möchte beim entpacken einer Zipdatei einen Ordner überspringen, falls er zuviel sein sollte.
Folgendes Problem. Ich habe festgestellt, daß es zwei Arten gibt wie Zipdateien erstellt werden. Also wie ein Zipprogramm die Ordnerstruktur erstellt. Als Beispiel mal folgende Ordnerstruktur (vor dem packen): Hauptverzeichnis /ueber und im Hauptverzeichnis befinden sich die Unterverzeichnisse /untereins und /unterzwei. Wenn ich das Hauptverzeichnis jetzt zippe (ueber.zip) und anschließend wieder entzippe, habe ich auf der Festplatte nur noch /untereins und /unterzwei. /ueber wird nicht angelegt. Ich kann ueber.zip auch umbenennen in ueberneu.zip, /ueber wird trotzdem nicht angelegt (so soll es ürigens auch sein). Jetzt gibt es aber auch Zipdateien (habe hier welche aus dem Internet) da wird /ueber angelegt, auch wenn man ueber.zip in ueberneu.zip umbenennt. Wenn ich mit PHP entpacke passiert das selbe, muß also an den Zipdateien selbst liegen.
Mit folgendem Script erstelle ich im Uploadverzeichnis einen Ordner aus dem Namen der Zipdatei und entpacke die sie darin.
Mit meinen Zips gibt es keine Probleme, egal ob Orginalname oder umbenannt. Bei den Zips aus dem Internet umgehe ich mit <--if($file_name == $newfolder."/")-->, daß /ueber angelegt wird. Bleibt noch das Problem, wenn ueber.zip in ueberneu.zip umbenannt wurde. Es müste geprüft werden, ob das erste Verzeichnis in der Zipdatei ein Singelverzeichnis ist oder ob es weitere Verzeichnisse bzw. Dateien gibt. Damit bin ich allerdings überfordert
Weiß jemand wie das geht?
Gruß Sven
ich möchte beim entpacken einer Zipdatei einen Ordner überspringen, falls er zuviel sein sollte.
Folgendes Problem. Ich habe festgestellt, daß es zwei Arten gibt wie Zipdateien erstellt werden. Also wie ein Zipprogramm die Ordnerstruktur erstellt. Als Beispiel mal folgende Ordnerstruktur (vor dem packen): Hauptverzeichnis /ueber und im Hauptverzeichnis befinden sich die Unterverzeichnisse /untereins und /unterzwei. Wenn ich das Hauptverzeichnis jetzt zippe (ueber.zip) und anschließend wieder entzippe, habe ich auf der Festplatte nur noch /untereins und /unterzwei. /ueber wird nicht angelegt. Ich kann ueber.zip auch umbenennen in ueberneu.zip, /ueber wird trotzdem nicht angelegt (so soll es ürigens auch sein). Jetzt gibt es aber auch Zipdateien (habe hier welche aus dem Internet) da wird /ueber angelegt, auch wenn man ueber.zip in ueberneu.zip umbenennt. Wenn ich mit PHP entpacke passiert das selbe, muß also an den Zipdateien selbst liegen.
Mit folgendem Script erstelle ich im Uploadverzeichnis einen Ordner aus dem Namen der Zipdatei und entpacke die sie darin.
PHP-Code:
<?PHP
$modul_path = "Pfad_auf_der_Festplatte";
$max_size = 5000000;
if ($zipfile != "")
{
if ((isset($_FILES['zipfile'])) && ($_FILES['zipfile']['size']<=$max_size))
{
$zipfilename = $_FILES['zipfile']['name'];
$newfolder = str_replace(substr($filterfilename, strrpos($filterfilename, '') - 4), "", $filterfilename);
if(!empty($zipfilename))
{
$dat = substr($zipfilename, strrpos($zipfilename, '.') + 1);
if ($dat != "zip")
{
$msg = $zipfilename." ist kein Zip Archiv!";
}
else
{
$searchfolder = $modul_path."/".$newfolder;
if (file_exists($searchfolder))
{
$msg = $newfolder." existiert bereits!";
}
else
{
mkdir($searchfolder, 0777);
if (move_uploaded_file($_FILES['zipfile']['tmp_name'],$modul_path."/".$_FILES['zipfile']['name']))
{
$zip_datei = $modul_path."/".$zipfilename;
$ziel_ordner = $searchfolder."/";
if (file_exists($zip_datei) && ($zip = zip_open($zip_datei)))
{
while($zip_entry = zip_read($zip))
{
$file_name = zip_entry_name($zip_entry);
$file_size = zip_entry_filesize($zip_entry);
$comp_meth = zip_entry_compressionmethod($zip_entry);
if ($file_name == $newfolder."/")
{
$ziel_ordner = $modul_path."/";
}
if (zip_entry_open($zip, $zip_entry, 'rb'))
{
$buffer = zip_entry_read($zip_entry, $file_size);
if (preg_match('/\/$/', $file_name) && ($comp_meth == 'stored'))
{
if (!is_dir($ziel_ordner.$file_name))
@mkdir($ziel_ordner . $file_name, 0777);
}
else
{
$fp = fopen($ziel_ordner . $file_name, 'wb');
fwrite($fp, $buffer);
fclose($fp);
}
zip_entry_close($zip_entry);
}
}
zip_close($zip);
}
if (unlink($zip_datei))
{
$msg = $newfolder." wurde angelegt, das ZIP-Archiv wurde gelöscht!";
}
}
}
}
}
}
else
{
$msg = "Das ZIP-Archiv ist zu groß";
}
}
echo $msg;
?>

Gruß Sven
Kommentar