Почему exec () не работает в цикле foreach?

Посмотрите, для целей тестирования, если я пытаюсь запустить PHP exec () статически только с одним видеофайлом, тогда его сжатие видео идеально (пожалуйста, смотрите первую строку).

Позже, когда я сжимаю динамически в цикле, тогда функция exec не работает. Скажите, пожалуйста, почему это не работает в цикле?

// echo shell_exec("/usr/local/bin/ffmpeg -i /home4/machine/public_html/riyaz/check_video/video_1494453415.mp4 -strict -2 -crf 20 /home4/machine/public_html/riyaz/zcompress/video_1494453415.mp4");

@include_once("start.php");

$directory_path = FILEPATH.'/';

$video_mp4 = glob("/home4/machine/public_html/riyaz/check_video/*.mp4");

/*video size will show in mb*/
foreach ($video_mp4 as $video_mp4_list){

$video_size = filesize($video_mp4_list);
$video_size_in_mb = round(($video_size/1048576), 2);

$get_file_name = explode('/',$video_mp4_list);
$get_file_name_for_destination = $get_file_name[6];

$getSourceFileNamePath = '/home4/machine/public_html/riyaz/check_video/'.$get_file_name_for_destination;
$getDestFileNamePath = '/home4/machine/public_html/riyaz/zcompress/'.$get_file_name_for_destination;

if ($video_size_in_mb >= 1000 ){

echo exec("/usr/local/bin/ffmpeg -i ". $getSourceFileNamePath ." -strict -2 -crf 20 ".$getDestFileNamePath);
}
}

-2

Решение

shell_exec() возвращает полный вывод: PHP shell_exec () тем не мение
exec() возвращает только последнюю строку из выходного файла, которая может быть пустой. Поэтому вы должны предоставить второй $ output и третий параметр $ return_var, чтобы получить более полезные данные: PHP exec ()

if ($video_size_in_mb >= 1000 ){
$command = "/usr/local/bin/ffmpeg -y -i ". $getSourceFileNamePath ." -strict -2 -crf 20 ".$getDestFileNamePath . ' 2>&1';
echo PHP_EOL ."Executing command: ". $command;
if(file_exists($getDestFileNamePath)) echo "File already exists!";
$output = null;
$return_var = null;
exec($command, $output, $return_var);
print_r($command);
print_r($return_var);
print_r($output);
echo PHP_EOL;
} else {
echo "video too small to proceed';
}

php shell_exec () против exec ()

РЕДАКТИРОВАТЬ: Проблема в том, что файл назначения существует и ffmpeg завершается без каких-либо действий. Одним из решений является использование атрибута -y перезаписать выходной файл 5.4 Основные параметры -y (глобальный) Перезаписать выходные файлы без запроса.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]