PHP se bloque en attendant exec pour retourner des résultats de wget + commande mysql
Question
Related: voir
J'ai cette commande:
exec("(wget -O http://domain/file.zip && mysql -u user -ppassword database -e \"UPDATE \\`table\\` SET \\`status\\` = 'live' WHERE \\`id\\` = '1234'\") & echo \$!");
La commande ci-dessus fonctionne très bien, mais attend PHP pour la vidéo pour terminer le téléchargement avant de passer au prochain téléchargement. La ligne suivante, cependant, envoie le téléchargement en arrière-plan, ce qui est ce que je suis en train de réaliser à partir de la ligne précédente.
exec("wget -O http://domain/file.zip &>/dev/null & echo \$!");
Comment puis-je de changer la première ligne ci-dessus pour envoyer le téléchargement en arrière-plan?
La solution
Vous devez vous faire utiliser et d'envoyer le processus à l'arrière-plan et que vous redirigez toutes les sorties. Donc, vous devez ajouter
> /dev/null 2>&1 &
à la fin de votre commande. Donc, vous devriez vous retrouver avec quelque chose comme ceci:
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 &");
[Modifier]
Pour rendre les choses plus simples, vous pouvez également déplacer le wget et la mise à jour à un autre fichier php que vous appelez avec exec. Donc, vous finiriez avec seulement
exec("php NewFile.php > /dev/null 2>&1 &");