ffmpeg funziona quando SSH ma non quando exec PHP


2

Non sono sicuro del motivo per cui prima ecco l'errore

Array ( [0] => ffmpeg: error while loading shared libraries: libvpx.so.1: failed to map segment from shared object: Permission denied ) 

il mio PHP

exec('ffmpeg -i /home/social/public_html/'.$key['upload_path'].' -threads 0  /home/social/public_html/'.$key['path'].$key['filename'].'.webm 2>&1',$out);

Ho anche provato

exec('/usr/bin/ffmpeg -i /home/social/public_html/'.$key['upload_path'].' -threads 0  /home/social/public_html/'.$key['path'].$key['filename'].'.webm 2>&1',$out);

Ora, quando utilizzo SSH nel server ed eseguo lo stesso comando, funziona perfettamente.

ecco il mio FFMPEG

ffmpeg-1.0/ffmpeg
ffmpeg version 1.0 Copyright (c) 2000-2012 the FFmpeg developers
  built on Oct 22 2012 19:38:33 with gcc 4.4.6 (GCC) 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvpx --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-gpl --enable-postproc --enable-nonfree
  libavutil      51. 73.101 / 51. 73.101
  libavcodec     54. 59.100 / 54. 59.100
  libavformat    54. 29.104 / 54. 29.104
  libavdevice    54.  2.101 / 54.  2.101
  libavfilter     3. 17.100 /  3. 17.100
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

Mi chiedo se qualcun altro ha questo errore

Risposte:


2

Presumo che tu stia cercando di eseguire il comando attraverso un server web. Perché se hai verificato che php-command-invocation funziona eseguendo php ffmpeg-invocation-script.phpcome "te stesso", la causa più probabile dell'errore sono le autorizzazioni utente errate.

Il tuo server web (apache?) È in esecuzione come un utente diverso da quello con cui accedi. È comune limitare l'accesso ai dispositivi audio e video agli utenti che appartengono a gruppi videoe audio. La soluzione semplice a questo è aggiungere il tuo apacheo l' httpdutente a quei gruppi:

usermod -a -G video apache

Per capire chi è il tuo apache come usare questo:

ps aux |grep [a]pache |tail -n1 | awk '{print $1}'

Per elencare tutti i gruppi sul sistema in uso (cercare audio e video):

getent  group | sort | awk -F: '{print $1}'

A parte ciò, potresti riscontrare problemi nell'esecuzione di ffmped da PHP perché gli script PHP sono generalmente limitati per l'esecuzione non più di un determinato periodo di tempo (circa 30 secondi). Questo è un parametro che puoi modificare nella configurazione di apache-php. Sul mio sistema questo si trova qui:

$ grep -Hn max_exec /etc/php/apache2-php5.3/php.ini
/etc/php/apache2-php5.3/php.ini:444:max_execution_time = 30

Ci sono anche limiti di memoria. Il parametro si trova nella stessa sezione del parametro max_execution_time.


Ho provato questi suggerimenti. Una piccola correzione: è "usermod -a -G video apache" (il primo nome deve essere il nome del gruppo, l'ultimo deve essere l'utente che viene aggiunto al gruppo)
Giuseppe,

0

Ho avuto un problema simile e la risposta di Yaroslav mi ha aiutato molto a risolverlo. Mi è capitato di installare ffmpeg con l'utente 'root' su $ HOME ('/ root /') tramite http://trac.ffmpeg.org/wiki/CompilationGuide/Centos , che ha lasciato ffpmeg non condiviso con l'utente PHP. Ho risolto la reinstallazione seguendo la stessa guida ma cambiando '$ HOME' per '/ usr / local', cioè installando in un percorso condiviso. Anche PHP "magicamente" può eseguirlo, ora.

Il tuo errore " ffmpeg: errore durante il caricamento delle librerie condivise: libvpx.so.1: impossibile mappare il segmento dall'oggetto condiviso: autorizzazione negata " sembra abbastanza simile a me. Suppongo che il tuo libvpx possa essere installato solo con permessi di root. Sebbene sia possibile eseguire correttamente il comando nel terminale SSH, PHP potrebbe non essere in grado di eseguirlo perché è gestito da un altro utente, come ha spiegato molto bene @ Ярослав Рахматуллин.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.