PHP si blocca in attesa di exec per restituire i risultati di comando mysql wget +
Domanda
Related: vedi qui
Ho questo comando:
exec("(wget -O http://domain/file.zip && mysql -u user -ppassword database -e \"UPDATE \\`table\\` SET \\`status\\` = 'live' WHERE \\`id\\` = '1234'\") & echo \$!");
Il comando sopra funziona bene, però PHP attende il video per completare il download prima di passare al successivo download. La riga seguente, però, manda il download in background, che è quello che sto cercando di realizzare dalla linea precedente.
exec("wget -O http://domain/file.zip &>/dev/null & echo \$!");
Come posso fare per cambiare la prima riga sopra per inviare il download sullo sfondo?
Soluzione
Devi fare si utilizza e di inviare il processo in secondo piano e che si reindirizzare tutto l'output. Quindi è necessario aggiungere
> /dev/null 2>&1 &
alla fine del vostro comando. Così si dovrebbe finire con qualcosa di simile:
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 &");
[Modifica]
Per fare cosa più semplice, è anche possibile spostare il wget e l'aggiornamento ad un altro file php che si sarebbe chiamata con exec. Così si finirebbe solo con
exec("php NewFile.php > /dev/null 2>&1 &");