2009-05-20 3 views
2

Verwandte: see herePHP hängt für exec warten Ergebnisse zurück von wget + mysql Befehl

ich diesen Befehl haben:

exec("(wget -O http://domain/file.zip && mysql -u user -ppassword database -e \"UPDATE \\`table\\` SET \\`status\\` = 'live' WHERE \\`id\\` = '1234'\") & echo \$!"); 

Der obige Befehl funktioniert gut, aber PHP für das Video wartet auf Beenden Sie den Download, bevor Sie mit dem nächsten Download fortfahren. Die folgende Zeile sendet jedoch den Download an den Hintergrund, was ich aus der vorherigen Zeile erreichen möchte.

exec("wget -O http://domain/file.zip &>/dev/null & echo \$!"); 

Wie gehe ich über die erste Zeile über die Änderung den Download auf den Hintergrund zu schicken?

Antwort

2

Sie müssen & verwenden, um den Prozess in den Hintergrund zu schicken und alle Ausgaben umzuleiten. Also müssen Sie am Ende Ihres Befehls

> /dev/null 2>&1 & 

hinzufügen. So sollten Sie mit etwas so enden:

exec("(wget -O http://domain/file.zip && mysql -u user -ppassword database -e \"UPDATE \\`table\\` SET \\`status\\` = 'live' WHERE \\`id\\` = '1234'\") echo \$! > /dev/null 2>&1 &"); 

[Bearbeiten]

Um Sache einfacher zu machen, können Sie auch die wget bewegen und das Update auf eine andere PHP-Datei, die Sie mit exec nennen würde. Also würden Sie nur mit

+0

laufen Die obige Zeile startet nicht den wget Download überhaupt, jedoch hängt PHP nicht (was ich wollte). Gibt es einen Grund, warum der Befehl wget möglicherweise nicht gestartet wird? –

+1

Sie sollten versuchen, exec ein Array übergeben, um zu erhalten, was der Befehl zurückgegeben hat. Sie können die Syntax von exec hier sehen: http://ca2.php.net/function.exec –