2017-08-07 1 views
0

Je voudrais trouver une solution à ce problème: J'ai une liste d'images que je veux convertir en vidéo sur le serveur. J'ai créé une machine virtuelle avec centOS et installé ffmpeg pour le tester. Tout fonctionne bien quand je me tape cette ligne dans le terminall'exécution d'une commande de php qui nécessite d'être root

sudo ffmpeg -r 10 -i img%03d.png -c:v libx264 -preset veryslow -crf 0 
video.mp4 

Ce que je veux est d'appeler quand je clique sur un bouton. Voici le code:

Javascript:

$(document).ready(function(){ 
    $("#ffmpeg").click(function(){ 
     $.get('ffmpegBooklet.php', function (data) { 
      console.log(data); 
     }); 
    }); 
}); 

PHP:

echo shell_exec("/usr/local/bin/ffmpeg -r 10 -i /img%03d.png -c:v 
libx264 -preset veryslow -crf 0 video.mp4 2>&1"); 

Qu'est-ce que je reçois dans la console du navigateur est: le journal de ffmpeg et à la fin -> Autorisation refusée

J'ai essayé avec une construction statique (après avoir lu sur internet) mais j'ai le même problème. Y at-il une solution pour faire cela sans les droits de sudo? Je ne veux pas faire cela en tant que sudo ou à une commande délicate pour donner des permissions sudo via php parce que je pense que ce n'est pas sécurisé.

Toute aide est la bienvenue! Merci de l'avoir lu :)

+0

Possible duplication de [Exécuter les commandes root via PHP] (https://stackoverflow.com/questions/8532304/execute-root-commands-via-php) – y0hami

+1

Au lieu d'exécuter en tant que root, configurer les autorisations appropriées pour la sortie chemins. – aergistal

+0

ok! Le problème de la permission ne vient pas de l'exécution de ffmpeg mais de la sortie? Je pensais qu'appeler le programme sans être root était le problème –

Répondre

0

Fixé comme ceci. Merci pour l'aide.

J'ai désactivé SELinux juste pour vérifier ce qui s'est passé. FFmpeg par php a travaillé comme un charme. J'ai vérifié le fichier créé et le propriétaire et le groupe étaient apache: apache. Tout d'abord, j'ai changé le propriétaire du dossier pour l'entrée et la sortie et définir Apache. Ensuite, j'ai donné des droits à Apache. J'ai allumé SELinux et j'ai encore eu le problème d'autorisation. J'ai trouvé cette solution, qui a fixé mon problème:

# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html(/.*)?' 

# restorecon -R /var/www/html 

J'ai aussi ajouter mon profil au groupe apache parce que je ne pouvais pas accéder au dossier plus.

Maintenant tout fonctionne avec SELinux ON, ce qui m'a satisfait. FFmpeg/apache ne sont plus bloqués!