2010-05-20 5 views
0

J'essaie actuellement de faire fonctionner SoX via PHP. Tout fonctionne jusqu'à présent, mais je ne récupère pas la sortie. J'ai déjà lu que l'on pourrait router stderr aussi à la sortie avec "2> & 1" .. le problème est, cela ne semble pas fonctionner sur les machines Windows.PHP exec - sortie manquante

une autre idée?

Code

est la suivante:

exec($path2sox . '/sox ' . $cmd . ' 2>&1', $output = array(), $result);

alors que le fichier est créé (si la commande sox de base est correct, j'ai aussi testé exactement la même commande dans les fenêtres commandline), mais ni résultat ni sortie donnent quelque chose en retour (la verbosité SoX est définie à 4, ce qui est la sortie complète)

Je suppose que Windows ne comprend pas l'instruction 2> & 1, mais comment cela peut-il être surmonté?

P.S: comme suggéré ci-dessous, j'ai aussi essayé cette

$output = array(); 
echo "Executing: [$path2sox/sox $cmd]"; 
exec("$path2sox/sox $cmd", $output, $result); 
echo "Result: "; 
var_dump($result); 
echo "\n
Output: "; var_dump($output);

où la sortie est:

Executing: [I:\SoX/sox --guard -V4 "somedirectory/test.wav" --compression "320.2" "somedirectory/test.mp3"]Result: int(0)


Output: array(0) { }

Le fichier a été créé correctement ...

+1

Veuillez partager le code que vous utilisez. – Josh

Répondre

4

Êtes-vous faire passer le second paramètre de tableau de sortie?

http://us2.php.net/manual/en/function.exec.php

string exec (string $command [, array &$output [, int &$return_var ]]) 

sortie

Si l'argument de sortie est présent, alors le tableau sera rempli de chaque ligne de sortie de la commande. Les espaces de fin, par exemple , ne sont pas inclus dans ce tableau. Notez que si le tableau déjà contient des éléments, exec() ajoutera à la fin du tableau. Si vous ne souhaitez pas que la fonction ajoute des éléments , appelez unset() sur le tableau avant de le passer à exec().

+0

Je pensais que c'était son problème, c'est pourquoi j'ai demandé du code. Désolé, je n'ai plus de mises à jour pour aujourd'hui! – Josh

+0

Pas grave, le représentant n'a plus vraiment de sens pour moi. ;) – Amber

+0

Je pense que je sentirais la même chose dans vos chaussures. Plus de 10 fois plus que moi et vous avez été sur le site moins de temps. Beau travail :-) – Josh

1

Je suppose que vous avez peut-être raison de dire que Windows n'aime pas l'instruction 2>&1. Que voyez-vous lorsque vous essayez:

$output = array() 
echo "Executing: [$path2sox/sox $cmd]"; 
exec("$path2sox/sox $cmd", $output, $result); 
echo "Result: "; 
var_dump($result); 
echo "\n<br>Output: "; 
var_dump(output); 
+0

essayé aussi sans le 2> & 1 .. toujours rien – japanitrat

+0

S'il vous plaît modifier votre question et afficher la sortie que vous avez vu ... – Josh

+0

Depuis le résultat était de 0, cela * apparaît * pour indiquer que l'appel a été réussi. Que se passe-t-il lorsque vous lancez "I: \ SoX/sox --guard -V4" dans le répertoire de la ligne de commande sous "somedirectory/test.wav" --compression "320.2" "somedirectory/test.mp3"? – Josh