# Zip bzw tar.gz Hochladen und entpacken



## XeN (26. Oktober 2004)

Hallo,

ich wollte ein Script schreiben welches einfach nur eine Zip- bzw. eine tar.gz Datei Uploadet und gleichzeitig auch entpackt.

Das Uploaden habe ich gelöst, die Datei liegt auf dem Server


```
<?PHP
if(!isset($_POST['sent'])) {
?>
<form enctype="multipart/form-data" action="<?PHP echo $PHP_SELF ?>" method="post">
	<table border="1" align="center">
		<tr>
			<td align="center">Bitte File zum Hochladen ausw&auml;hlen</td>
		</tr>
		<tr>
			<td><input type="file" name="file"></td>
		</tr>
		<tr> 
			<td align="center"><input type="submit" value="hochladen"></td>
		</tr>
		<tr>
			<td><input type="hidden" name="sent" value="1"></td>
		</tr>
	</table> 
</form>
 
<?PHP
}elseif($_POST['sent'] == "1") {
	$tempname = $_FILES['file']['tmp_name'];
	$name = $_FILES['file']['name'];
	$type = $_FILES['file']['type'];
	$size = $_FILES['file']['size'];
	/*
	//.:D E B U G:.
	echo "Typ: $type<br>";
	echo "Name: $name<br>";
	echo "Tempname: $tempname<br>";
	echo "Groesse: $size";
	*/
	if($type != "application/x-gzip") {
		$err[] = "FEHLER: Es d&uuml;rfen nur Dateien vom T&uuml;p application/x-gzip mit der endung tar.gz Hochgeladen werden!";
	}elseif($size > 50000000) {
		$err[] = "FEHLER: Es d&uuml;rfen nur Dateien mit einer Maximalgr&ouml;sse von 50 Megabyte hochgeladen werden!";
	}
	
	if(empty($err)) {
		copy("$tempname","entpacken/$name");
		echo "Die datei $name wurde erfolgreich hochgeladen und entpackt";
		
 
	}else{
		foreach($err as $error) {
			echo "$error<br>";
		}
	}
}
?>
```

Habe dazu noch das Problem das er mir den Type von der Zip datei nicht anzeigen will, ergo kann ich ihn auch nicht auf richtigkeit überprüfen, oder hab ich einfach nur einen Fehler gemacht?

Jedenfalls zum entpacken, habs mit einer reihe von befehlen aus der Zlib versucht wie gzuncompress, gzopen, gzwrite usw. aber alles wollte nicht so recht. Vielleicht hab ich auch die Falschen befehle Kombiniert.

Jedenfalls wollte ich mal fragen ob jemand sowas schon mal gemacht hat und mir etwas dabei Helfen kann.

mfg XeN


----------



## mslap (26. Oktober 2004)

Also ich weiss selber nicht was "entpacken/$name" mach soll, aber löse das entpacken doch durch executen eines bash commands:


exec ("unzip ".$name.".$Entpackungspfad.")

natürlich muss dein php die rechte auf unzip und den pfad zum schreiben haben, und unzip sollte auf dem server installiert sein.


----------



## XeN (26. Oktober 2004)

Das klingt schon mal gut, allerdings habe ich immernoch das Problem das wenn ich eine .zip datei Hochlade er mir den Type nicht anzeigt, heißt also das er bei der Überprüfung obs ein tar.gz oder ein zip ist immer den Fehler ausgibt weil es ja weder tar.gz noch .zip ist sondern nix.

Hast du da auch noch eine idee, werde deinen vorschlag gleich mal ausprobieren.

[edit]
das entpacken/$name macht nix anderes als das geuploadete file in den ordner entpacken zu verschieben und es in $name umzubenennen.

Habe deine anregung mal ausprobiert, wenn ich den unzip befehl in der Console verwende geht er auch, aber über das php script nicht
[/edit]


----------



## mslap (26. Oktober 2004)

du könntest den filetyp mit der ereg funktion prüfen.

if (!ereg(".zip|.tar.gz",$name)) 
die("nur zip dateien!");

und um den bash befehl zu nutzen, muss php schreibrechte auf den ordner haben in den du entpackst und ich glaub auch zugriffs rechte auf unzip. kommt eben drauf an zu welcher benutzergruppe dein php gehört.


----------

