tar.gz entpacken auf Webserver

Loki2

Erfahrenes Mitglied
Hallo,

ich habe ein Problem mit dem entpacken eines tar.gz archives auf meinem Webserver. Ich habe bisher keinen funktionierenden Weg gefunden.
Das was bisher am besten funktioniert hat war das Tutorial Dekompression mit PHP allerdings bekomme ich da nach 60 Sekunden ein Timeout und das entpacken wird abgebrochen. PclZip und PEAR::Package::Tar funktionieren bei mir überhaupt gar nicht.
ZipDeploy funktioniert auch nicht :-(

Hat noch jemand eine Idee wie ich das Archiv sonst entpackt bekomme oder wie ich das Tutorial anpassen muss damit kein Timeout kommt?

Vielen Dank.

Gruß und so
Loki2
 
Zuletzt bearbeitet:
Nein kann ich leider nicht da ich nicht an die PHP ini dran komme.

Ist ja nicht mein Server, ich habe auf dem Server nur Webspace gemietet.
 
Nach dem Script hab ich das Ganze auch mal als Klasse umgesetzt. Die kannst Du hier finden.
Hab auch mal fix was rumgetestet und die Klasse scheint um einiges schneller zu sein.
Funktion:
time php uncompress.php eyeOS_1.0.3.tar hat gesagt.:
real 0m4.720s
user 0m4.292s
sys 0m0.388s
Klasse:
time php test.php eyeOS_1.0.3.tar hat gesagt.:
real 0m0.072s
user 0m0.048s
sys 0m0.024s
Das ist insofern auch sehr interessant da die Datei in der Klasse immer wieder geoeffnet und geschlossen wird, wobei in der Funktion nur einmal geoeffnet und eben am Ende geschlossen wird.
Moeglicherweise liegt es daran dass die Dateinfos gleich zu Beginn gelesen werden und nicht erst beim Entpacken ausgewertet werden muessen. Einen anderen Grund wuesste ich jetzt nicht.

Mit ein paar Archiven hatte ich mit der Klasse aber Probleme, es wurden scheinbar nicht alle Dateien entpackt. Beim Beispiel oben wurde aber alles entpackt, mal davon abgesehen dass ich die Verzeichnisstruktur mit
Code:
mkdir -p eyeOS/img
manuell anlegen musste da es scheinbar keine Eintraege fuer die Verzeichnisse im Archiv gab.

An der Klasse muss ich also wohl noch ein wenig was machen. Allgemein scheint diese aber die weitaus schnellere Variante darzustellen.
 
Wenn der Server nicht im "safe_mode On" läuft sollte folgendes funktionieren:

PHP:
set_time_limit(0);

am Anfang des Scriptes setzen...

[edit]
ich habs mir überlegt, lieber doch

PHP:
set_time_limit(900);

sollte in dem Fall dann ne Laufzeit von 15min sein, dann knallts dir auch net den Server weg wenns mal wirklich nen Fehler sein sollte und das Script unendlich weiter läuft...
[/edit]
 
Zuletzt bearbeitet:
Vielen Dank für die Antworten.

@Dennis Wronka: Wie benutze ich denn diese Klasse? Ich habe nicht sooo viel Erfahrung mit PHP.

@Big-Tux: Das funktioniert leider nicht. Es passiert einfach gar nichts. Also der Browser lädt und lädt und lädt und lädt aber es wird nichts entpackt :confused:
 
Hier mal das Script welches ich vorhin zum Testen genutzt habe.
PHP:
<?php
require_once('untar.class.php');
if (isset($argv[1]))
	{
		$archive=$argv[1];
		$tarfile=new untar($archive);
		$filelist=$tarfile->getfilelist();
		for ($x=0;$x<count($filelist);$x++)
			{
				if ($filelist[$x]['filetype']=='directory')
					{
						mkdir($filelist[$x]['filename']);
					}
				else
					{
						$file=fopen($filelist[$x]['filename'],'w');
						$data=$tarfile->extract($filelist[$x]['filename']);
						fwrite($file,$data);
						fclose($file);
					}
			}
		unset($tarfile);
	}
?>
Da ich in der Shell gearbeitet habe hab ich mit $argv[1] gearbeitet.
Fuer Dich duerfte der Code ab $tarfile=new untar($archive); interessant sein. $archive ist lediglich der Dateiname des zu entpackenden Tar-Files.
Nachteil hierbei ist, dass im Gegensatz zum anderen Script .gz- oder .bz2-Kompression nicht beruecksichtigt werden und man auch selbst Verzeichnisse anlegen und Dateien schreiben muss da die Klasse nur die Daten aus der Datei holt.
 
Verstehe ich das richtig? Alle Dateien aus dem Archiv werden in ein Verzeichnis geworfen ohne die Ordnerstruktur in dem Archiv beizubehalten? Dann kann ich das leider nicht nutzen, das ist zuviel als das ich es per Hand wegsortieren könnte :(
 
Dann könntest du rein Theoretisch noch folgendes Probieren:

PHP:
ini_set('max_execution_time', '300');

wobei die 300 jetzt 5min laufzeit wären...
 
Nein, Verzeichnisse werden erstellt und auch genutzt, vorausgesetzt die Eintraege sind richtig im Archiv.

Am besten schaust Du Dir mal die Filelist an, dann sollte einiges klarer werden.
PHP:
<?php
//$archive belegen
$tarfile=new untar($archive);
var_dump($tarfile->getfilelist());
unset($tarfile);
?>
 
Zurück