Как выполнять команды через PHP? - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь конвертировать видео в MP4 с помощью FFMPEG.Я настроил это следующим образом:

.
.
private $ffmpegPath;

public function __construct($con) {
    $this->con = $con;
    $this->ffmpegPath = realpath("ffmpeg/bin/ffmpeg.exe");
}
.
.
public function convertVideoToMp4($tempFilePath, $finalFilePath){
    $cmd = "$this->ffmpegPath -i $tempFilePath $finalFilePath 2>&1";

    $outputLog = array();
    exec($cmd, $outputLog, $returnCode);

    if($returnCode != 0){
        foreach ($outputLog as $line){
            echo $line."<br>";
            return false;
        }
    }

    return true;
}

И в браузере я получаю следующую ошибку: «C: \ xampp \ htdocs \ Thinksmart First Sprint» не распознается как внутренняя или внешняя команда ».

В моем конструкторе он настроен так, чтобы дать мне реальный путь, и я подозреваю, что это то, что он делает в командной строке:

C: / xampp / htdocs / Thinksmart FIrst Sprint /ffmpeg / bin / ffmpeg.exe -i (временное имя файла) (имя файла, которое я хочу)

И это должно работать, но я не знаю, почему это не так. Любые идеи? Это мой первый раз, когда я работаю с конвертированием видео.

1 Ответ

0 голосов
/ 30 января 2019

Как видите, пробелы в вашей команде используются для разделения аргументов.Поэтому, если в пути есть пробелы, вам нужно заключить весь путь в кавычки, чтобы оболочка / процессор знал, что они не являются разделителями, а являются одним аргументом:

$cmd = $cmd = '"' . $this->ffmpegPath . '" -i $tempFilePath $finalFilePath 2>&1';

Что приведет к командекак это:

"C: / xampp / htdocs / Thinksmart First Sprint / ffmpeg / bin / ffmpeg.exe" -i C: / путь / к / file1 C: / путь / к / file22> & 1

Я думаю, что в Windows работают только двойные кавычки.Вам нужно указать $tempFilePath и $finalFilePath, если в них тоже могут быть пробелы.

...