2009-05-06 6 views
10

Ich schreibe ein PHP-Skript, das hochgeladene Videodateien in FLV konvertiert, aber ich möchte nur diesen Teil des Skripts ausführen, wenn der Benutzer FFmpeg auf dem Server installiert hat.Detect FFmpeg Installation und Version

Wäre es möglich, dies im Voraus zu erkennen? Könnte ich vielleicht einen FFmpeg-Befehl ausführen und testen, ob es zurückkommt "Befehl nicht gefunden?"

Antwort

3

Sie haben Ihre Frage beantwortet, Sie können den Befehl ausführen, und wenn er zurückkehrt, wissen Sie, dass er nicht installiert ist, oder Sie können die Standardpfade überprüfen, die der Benutzer für mögliche ffmpeg-Binärdateien festgelegt hat.

+0

Danke. Könnten Sie demonstrieren, wie ich die Rückgabe eines exec() Befehls in PHP auswerten könnte? Ist PHP intelligent genug, um false zurückzugeben, wenn der Befehl nicht funktioniert? Das würde mich überraschen. – Aaron

+3

Beispiel: if (strpos ('ffmpeg --help', 'ffmpeg')> -1) echo 'Installiert!'; –

+0

@ Cd-MaN: Es sei denn, dass die Ausgabe eine Nachricht ähnlich wie ** Das Paket ffmpeg ist nicht installiert, können Sie es installieren, indem Sie ... **. Außerdem funktioniert 'strpos' nicht als Javascript-Äquivalent, Sie müssen es gegen'! == false' testen. –

0

Man könnte dies einen Versuch geben:

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 
} 

wiederverwendbare für andere Funktionen als auch - nicht bestimmte Sicherheitsbedenken.

+1

Dies ist eine sehr schlechte Möglichkeit, nach einem Befehl zu suchen. Installierte Manpages bedeuten nicht, dass das Programm installiert ist - und umgekehrt. Es reicht aus, nach der ausführbaren Datei selbst zu suchen. – viraptor

+1

Gut genug, es war die erste Idee, die mir in den Sinn kam und auf dem Server arbeitete, auf dem ich sie getestet hatte. Ich dachte, ich würde sehen, ob es auch für das OP funktionierte. – StudioKraft

6

Der dritte Parameter der Funktion exec() ist der Rückgabewert des ausgeführten Programms. Verwenden Sie es so:

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

Dies funktioniert auf meiner Ubuntu-Box.

9

Versuchen:

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

Wenn es wieder leer ffmpeg kommt nicht zur Verfügung steht, sonst wird es den absoluten Pfad der ausführbaren Datei halten, die Sie in der aktuellen ffmpeg Aufruf verwenden:

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

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

Hallo, ich suche nach diesem Problem und ich kann Version von ffmpeg mit diesem Code erhalten: echo (shell_exec ('/ usr/bin/ffmpeg -version'));