lancer une commande depuis php

Le
Gef
Bonjour,



Après avoir uploadé un fichier vidéo sur un serveur, je voudrais lancer
l'encodage de cette vidéo via une page web, en faisant appel à la fonction
"passthru". J'ai donc réalisé deux tests :



1) en ligne de commande, la commande suivante fonctionne parfaitement et
créé le fichier test.flv :



#/usr/bin/ffmpeg -i /usr/local/movies/test.mov -acodec mp3 -ab 48 -f flv -s
640x480 -ar 22050 -aspect 4:3 -pass 1 -b 360 -r 25 -y
/usr/local/movies/test.flv



L'encodage dure environ 1 minute, délai au bout duquel le serveur me rend la
main.



2) je crée ensuite un script php dans une page web avec les mêmes élements :



<?php

$cmd_encodage = "/usr/bin/ffmpeg -i /usr/local/movies/test.mov -acodec
mp3 -ab 48 -f flv -s 640x480 -ar 22050 -aspect 4:3 -pass 1 -b 360 -r 25 -y
/usr/local/movies/test.flv &";

echo passthru($cmd_encodage,$error);

echo "val retournée ".$error;

?>



Après exécution de ce script, la valeur retournée $error est 0. Un fichier
destination test.flv est créé dans le répertoire /usr/local/movies, mais il
est vide ( 0 octet ) !

Aucun process concernant ffmpeg ne tourne sur le serveur après avoir lancé
la commande. Pourtant, le délai nécessaire à l'encodage pourrait me laisser
le temps de l'apercevoir dans un ps -ef.

Je précise que les droits sur le répertoire /usr/local/movies ont été fixés
à 777 pour les besoins du test.



Bien évidemment, je préférerais démarrer l'encodage depuis la page web,
plutôt que le faire en ligne de commande :)

Quelqu'un aurait-il une idée ??



Ma config :

Dédibox CentOs 4.2 / php 4.3.9

safe_mode off



Merci d'avance

Gérard
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
P'tit Marcel
Le #60348
je crée ensuite un script php dans une page web avec les mêmes élements :
<?php
$cmd_encodage = "/usr/bin/ffmpeg - /usr/local/movies/test.mov -acodec
mp3 -ab 48 -f flv -s 640x480 -ar 22050 -aspect 4:3 -pass 1 -b 360 -r 25 -y
/usr/local/movies/test.flv &";
echo passthru($cmd_encodage,$error);
echo "val retournée ".$error;

Après exécution de ce script, la valeur retournée $error est 0. Un fichier
destination test.flv est créé dans le répertoire /usr/local/movies, mais il
est vide ( 0 octet ) !
Aucun process concernant ffmpeg ne tourne sur le serveur après avoir lancé
la commande. Pourtant, le délai nécessaire à l'encodage pourrait me laisser
le temps de l'apercevoir dans un ps -ef.
Je précise que les droits sur le répertoire /usr/local/movies ont été fixés
à 777 pour les besoins du test.


Si tu veux lancer le traitement en background, je crois que la ligne
devrait terminer par: > /dev/null 2>&1 &
personnellement, j'utilise plutôt exec ou system et réserve passthru aux
programmes qui renvoient des flots binaires au navigateur. Au passage le
echo avant le passthru ne sert à rien.

est-ce que l'utilisateur nobody a accès à usr/bin ?


Bien évidemment, je préférerais démarrer l'encodage depuis la page web,
plutôt que le faire en ligne de commande :)


peut être fallait-il commencer par cela au lieu de te prendre la tête ?

pour l'intégration de ffmpeg avec php,
http://sourceforge.net/projects/ffmpeg-php/ est ton amie...


eça
--
P'tit Marcel
pourquoi personne y répond à ma question :'(

Publicité
Poster une réponse
Anonyme