Hallo !
Folgendes Problem: Ich möchte mit PHP die Dateien in einem Verzeichnis zusammenfassen und packen.
Dazu rufe ich aus PHP raus "tar" und "gzip" auf:
--------------------------------------------------------
// Dateinamen erzeugen (mit Zufallszahl)
srand((double)microtime()*1000000);
$ciffer = round(rand(0,10000));
// TAR und GZIP starten. Die resultierenden dateinamen haben das format ~abc12345-archiv23456.tar
$gehtes = system("tar -cf /tmp/~".$login."-archiv".$ciffer.".tar /home/".$login.$actdir);
$gehtes2 = system("gzip -9 /tmp/~".$login."-archiv".$ciffer.".tar");
// bei Fehlern: Müll aufräumen
if($gehtes == false || $gehtes2 == false)
{ @unlink("/tmp/~".$login."-archiv".$ciffer.".tar");
@unlink("/tmp/~".$login."-archiv".$ciffer.".tar.gz"); }
------------------------------------------------------------
Das funktioniert ... ab und zu.
Manchmal bleibt das Programm sinnloser Weise nach dem Packen einfach stehen und macht keine weiteren Ausgaben.
Manchmal packt es erst gar nicht.
Es wird aber _immer_ für $gehtes und $gehtes2 "false" zurückgegeben. Warum ?
Die Rechte stimmen alle (sowohl für /tmp als auch für die Verzeichnisse aus denen die Daten geholt werden und tar und gzip) und die einzige "Fehlermeldung" die in den Logs zu finden ist lautet "tar: Removing leading `/' from member names", was ja nicht direkt ein Fehler ist.
Warum immer "false" ?
Warum geht die Packerei manchmal und wann anders nicht ?
Das Ergebnis ist immer das gleiche, egal ob ich exec, shell_ecex, system oder die berühmten Backticks verwende ...
Ciao,
Harry
PS: Daß die Dateien nicht da sind, wenn immer "false" zurückgegeben wird, ist mir schon klar, weil sie ja anschließend gelöscht werden ;-)