Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

lancer une commande depuis php

1 réponse
Avatar
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

1 réponse

Avatar
P'tit Marcel
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 :'(
<news: