2009-05-06 10 views
10

Piszę skrypt PHP, który konwertuje przesłane pliki wideo na FLV w locie, ale chcę tylko, aby uruchamiał tę część skryptu, jeśli użytkownik ma zainstalowany FFmpeg na serwerze.Wykryj instalację FFmpeg i wersję

Czy istnieje sposób na wykrycie tego z wyprzedzeniem? Czy mógłbym ewentualnie uruchomić polecenie FFmpeg i sprawdzić, czy wróci "polecenie nie znaleziono?"

Odpowiedz

3

Odpowiedziałeś na własne pytanie, możesz uruchomić polecenie, a jeśli wróci ono negatywne, wiesz, że nie jest zainstalowane, lub możesz sprawdzić domyślne ścieżki ustawione przez użytkownika dla możliwych plików binarnych ffmpeg.

+0

Dzięki. Czy mógłbyś pokazać, jak mogłem ocenić zwrot polecenia exec() w PHP? Czy PHP jest wystarczająco inteligentny, aby zwracać fałsz, jeśli polecenie nie działa? To by mnie zaskoczyło. – Aaron

+3

Przykład: if (strpos ('ffmpeg --help', 'ffmpeg')> -1) echo" Zainstalowane! "; –

+0

@ Cd-MaN: Chyba że zmieni się na wyjściowy komunikat podobny do ** Pakiet ffmpeg nie jest zainstalowany, możesz go zainstalować, uruchamiając ... **. Ponadto 'strpos' nie działa jako odpowiednik Javascript, musisz przetestować go przed'! == false'. –

0

Można dać tego spróbować:

function commandExists($command) { 
    $command = escapeshellarg($command); 
    $exists = exec("man ".$command,$out); 
    return sizeof($out); 
} 

if (commandExists("ffmpeg")>0) { 
    // FFMPeg Exists on server 
} else { 
    // No FFMPeg 
} 

wielokrotnego użytku dla innych funkcji, jak również - nie pewne obawy związane z bezpieczeństwem.

+1

To jest bardzo zły sposób na sprawdzenie polecenia. Zainstalowane strony podręcznika nie oznaczają, że program jest zainstalowany - i na odwrót. Wystarczy sprawdzić plik wykonywalny. – viraptor

+1

To był wystarczający pomysł, to był pierwszy pomysł, który wpadł mi do głowy i pracował na serwerze, na którym go przetestowałem. Pomyślał, że sprawdzi się również w przypadku OP. – StudioKraft

6

Trzeci parametr funkcji exec() jest wartością zwracaną wykonywanego programu. Użyj go tak:

exec($cmd, $output, $returnvalue); 
if ($returnvalue == 127) { 
    # not available 
} 
else { 
    #available 
} 

To działa na moim polu Ubuntu.

9

Spróbuj:

$ffmpeg = trim(shell_exec('which ffmpeg')); // or better yet: 
$ffmpeg = trim(shell_exec('type -P ffmpeg')); 

Jeśli wraca pusty ffmpeg nie jest dostępna, w przeciwnym razie będzie posiadać bezwzględną ścieżkę do pliku wykonywalnego, który można wykorzystać w rzeczywistej rozmowy ffmpeg:

if (empty($ffmpeg)) 
{ 
    die('ffmpeg not available'); 
} 

shell_exec($ffmpeg . ' -i ...'); 
0

hi szukam tego problemu i mogę pobrać wersję ffmpeg tym kodem: echo (shell_exec ('/ usr/bin/ffmpeg -version'));