Uniquement si tu souhaites voir ce que le bash te renvoie comme erreur. Normalement, exec() assignera à $out, la sortie standard (stdout). Si, par exemple tu veux lister tes fichiers avec la commande
ls, si tu fais:
exec('ls', $out);
Le résultat (stdout) sera stocké dans le tableau $out. Mais si une erreur se produit, il n'y aura aucune
stdout mais bien une sortie vers
stderr du shell Linux. Or, celui-ci n'est pas renvoyé à PHP pour une raison qui m'échappe.
En ajoutant à la commande à exécuter l'instruction
2>&1 on redirige le
stderr vers le
stdout ce qui rend le message d'erreur du shell disponible dans PHP (dans le $out de mon exemple). Mais plus la sortie standard! Tu me suis toujours? C'est pourquoi ce n'est à utiliser que pour débuger.
As tu une solution pour que l'éxécution du script php se termine tout en laissant l'exec(...) continuer ?
Oui:
exec("mysqldump -u LOGIN -pMDP maBDD> /sauvegarde/maBDD.sql &");
L'ajout de
& devrait exécuter le dump en arrière-plan et rendre la main à l'exec() de PHP.
ripat