2009-05-06 15 views
10

Estoy escribiendo un script PHP que convierte archivos de video cargados en FLV sobre la marcha, pero solo quiero que ejecute esa parte del script si el usuario tiene FFmpeg instalado en el servidor.Detecta la instalación de FFmpeg y la versión

¿Habría una forma de detectar esto antes de tiempo? ¿Podría quizás ejecutar un comando FFmpeg y probar si se devuelve "comando no encontrado?"

Respuesta

3

Respondió su propia pregunta, puede ejecutar el comando y si resulta negativo, sabe que no está instalado, o puede verificar las rutas predeterminadas que el usuario ha configurado para posibles ffmpeg binarios.

+0

Gracias. ¿Podrías demostrar cómo puedo evaluar el retorno de un comando exec() en PHP? ¿Es PHP lo suficientemente inteligente como para devolver falso si el comando no funciona? Eso me sorprendería. – Aaron

+3

Muestra: if (strpos ('ffmpeg --help', 'ffmpeg')> -1) echo '¡Instalado!'; –

+0

@ Cd-MaN: A menos que eso dé como resultado un mensaje similar a ** El paquete ffmpeg no está instalado, puede instalarlo ejecutando ... **. Además, 'strpos' no funciona como el equivalente de Javascript, tienes que probarlo contra'! == falso'. –

0

Se podría probar esto:

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 
} 

reutilizable para otras funciones, así - no está seguro de los problemas de seguridad.

+1

Esta es una forma muy mala de buscar un comando. Las páginas man instaladas no significan que el programa esté instalado, y viceversa. Es suficiente verificar el ejecutable mismo. – viraptor

+1

Bastante, fue la primera idea que me vino a la mente y funcionó en el servidor en el que lo probé, pensé que vería si funcionaba también para el PO. – StudioKraft

6

El tercer parámetro de la función exec() es el valor de retorno del programa ejecutado. Utilizar de esta manera:

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

Esto funciona en mi caja de Ubuntu.

9

Probar:

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

Si se trata de volver ffmpeg vacío no está disponible, de lo contrario se llevará a cabo la ruta absoluta al ejecutable, que se puede usar en la llamada ffmpeg real:

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

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

hola busco este problema y puedo obtener la versión de ffmpeg con este código: echo (shell_exec ('/ usr/bin/ffmpeg -version'));

Cuestiones relacionadas