par
Ripat » 20 févr. 2006, 16:05
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.
[quote="Romeo"][code]exec(MA COMMANDE 2>&1 PARAMETRES, $out, $status);[/code][/quote]
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 [b]ls[/b], si tu fais:
[php]exec('ls', $out);[/php]
Le résultat (stdout) sera stocké dans le tableau $out. Mais si une erreur se produit, il n'y aura aucune [b]stdout[/b] mais bien une sortie vers [b]stderr[/b] 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 [b]2>&1[/b] on redirige le [b]stderr[/b] vers le [b]stdout[/b] 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.
[quote="Romeo"]As tu une solution pour que l'éxécution du script php se termine tout en laissant l'exec(...) continuer ?[/quote]
Oui:
[php]exec("mysqldump -u LOGIN -pMDP maBDD> /sauvegarde/maBDD.sql &");[/php]
L'ajout de [b]&[/b] devrait exécuter le dump en arrière-plan et rendre la main à l'exec() de PHP.