2011-01-15 4 views
2

J'exécute un certain code via ffmpeg pour encoder des fichiers avi en FLV. Mon code ffmpeg est correct et fonctionne très bien, mais quand une erreur se produit (supposons qu'il s'agit d'un fichier avi corrompu, ffmpeg ne l'encodera pas), donc je veux savoir quelle est l'erreur. Voici un exemple de code:comment afficher la sortie d'erreur ffmpeg

$v_cmd=" some code to transcode"; 
exec($v_cmd,$v_output,$v_status); 
if($v_status == 0) 
{ 
echo "Success!"; 
} 
else 
{ 
echo "ERROR: ".$v_output; 
} 

Mais ce v_output $ est tout simplement montrer comme ERROR: Array ... j'ai essayé

echo "ERROR: ".implode($v_output); 

mais il était vide ... Comment puis-je obtenir le message d'erreur ffmpeg a donné pour que je puisse comprendre ce qui s'est mal passé. C'est un script php cron et il n'est pas exécuté manuellement dans la ligne de commande.

Répondre

3

Dans les systèmes et les applications compatibles POSIX, les erreurs sont envoyées à STDERR et non à STDOUT. exec ne fera que remplir l'argument $output avec STDOUT:

exec("foo", $output); 
var_dump($output); 

Affiche:

array(0) { 
} 

Vous devez rediriger STDERR vers STDOUT si vous voulez que cela fonctionne. Par exemple, * nix:

exec("foo 2>&1", $output); 
var_dump($output); 

Will affichage:

array(1) { 
    [0]=> 
    string(18) "sh: foo: not found" 
} 
+0

Merci .. la '2> & 1' ont aidé. J'ai modifié mon code pour générer l'erreur basée sur la sortie var_dump. –

Questions connexes