par
Hywan » 28 déc. 2008, 13:26
Bah le mieux pour tout observer est de ne faire aucune redirection de flux. Tu peux utiliser passthru() aussi, qui se manipule un peu mieux. J'utilise toujours ceci :
ob_start();
passthru($command . '2>&1', $return);
$content = ob_get_contents();
ob_end_clean();
On obtient ainsi le code de retour de la commande dans
$return (très utile), et on lit la sortie d'erreur à la sortie standard (STDERR à STDOUT) dans
$content.
Tu peux ensuite faire des tests du genre :
if($return > 0)
throw new My_Exception('Error when executing the command %s (returned the code %d).', $command, $return);
par exemple (j'ai placé les arguments comme dans un printf(), ce n'est pas le fonctionnement réel).
Je rappelle que 0 en Shell est la valeur
vraie ou plutôt
succès. Tout retour différent de 0 (
i.e. 1, 2 …) est considéré comme une erreur.
Attention à ne pas négliger les fonctions escapeshellarg() et escapeshellcmd().
Bah le mieux pour tout observer est de ne faire aucune redirection de flux. Tu peux utiliser passthru() aussi, qui se manipule un peu mieux. J'utilise toujours ceci : [php]ob_start();
passthru($command . '2>&1', $return);
$content = ob_get_contents();
ob_end_clean();[/php]
On obtient ainsi le code de retour de la commande dans [i]$return[/i] (très utile), et on lit la sortie d'erreur à la sortie standard (STDERR à STDOUT) dans [i]$content[/i].
Tu peux ensuite faire des tests du genre : [php]if($return > 0)
throw new My_Exception('Error when executing the command %s (returned the code %d).', $command, $return);[/php] par exemple (j'ai placé les arguments comme dans un printf(), ce n'est pas le fonctionnement réel).
Je rappelle que 0 en Shell est la valeur [i]vraie[/i] ou plutôt [i]succès[/i]. Tout retour différent de 0 ([i]i.e.[/i] 1, 2 …) est considéré comme une erreur.
Attention à ne pas négliger les fonctions escapeshellarg() et escapeshellcmd().