2009-05-06 4 views
10

Я пишу PHP-скрипт, который конвертирует загруженные видеофайлы в FLV на лету, но я хочу, чтобы он запускал эту часть скрипта, если у пользователя есть FFmpeg, установленный на сервере.Обнаружить установку FFmpeg и версию

Был ли способ обнаружить это раньше времени? Могу ли я запустить команду FFmpeg и проверить, возвращается ли она, «команда не найдена?»

ответ

3

Вы ответили на свой вопрос, вы можете запустить команду, и если она вернется отрицательно, вы знаете, что она не установлена ​​или вы можете проверить пути по умолчанию, которые пользователь установил для возможных двоичных файлов ffmpeg.

+0

Спасибо. Не могли бы вы продемонстрировать, как я могу оценить возвращение команды exec() в PHP? Является ли PHP достаточно умным, чтобы вернуть false, если команда не работает? Это меня удивило бы. – Aaron

+3

Пример: if (strpos ('ffmpeg --help', 'ffmpeg')> -1) echo 'Installed!'; –

+0

@ Cd-MaN: если это не выводит сообщение, похожее на ** Пакет ffmpeg не установлен, вы можете установить его, запустив ... **. Кроме того, 'strpos' не работает как эквивалент Javascript, вам нужно проверить его на'! == false'. –

0

Вы могли бы дать этому попытку:

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 
} 

многоразовый для других функций, а также - не уверен, проблем безопасности.

+1

Это очень плохой способ проверить команду. Установленные страницы руководства не означают, что программа установлена ​​- и наоборот. Достаточно проверить сам исполняемый файл. – viraptor

+1

Справедливо, это была первая идея, которая появилась на ум и работала на сервере, на котором я тестировал ее, подумал, что посмотрю, будет ли это работать и для OP. – StudioKraft

6

Третий параметр функции exec() - это возвращаемое значение выполняемой программы. Используйте его вот так:

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

Это работает на моей коробке Ubuntu.

9

Try:

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

Если он возвращается пустой FFmpeg не доступен, в противном случае она будет содержать абсолютный путь к исполняемому файлу, который вы можете использовать в реальной FFmpeg вызова:

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

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

привет, я ищу эту проблему, и я могу получить версию ffmpeg по этому коду: echo (shell_exec ('/ usr/bin/ffmpeg -version'));