запустите ffmpeg в фоновом режиме, чтобы страница могла быть изменена - PullRequest
0 голосов
/ 09 июня 2011

У меня есть проблема, которая сводит меня с ума.У меня есть PHP-скрипт, который загружает файл в каталог.Затем я мог бы преобразовать его с помощью ffmpeg, но я не хочу, чтобы пользователю приходилось ждать на этой странице, я хочу, чтобы он мог изменять страницу, пока ffmpeg работает с файлом.Как мне этого добиться, использовать ли пакет или cron или как?Как я смогу общаться с моим веб-приложением после обработки файла? Запустить файл php в cmd, чтобы добавить запись mysql?

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

$ command = shell_exec ('/ usr / local / bin / ffmpeg -i /home/geoff/Desktop/cave.wmv -acodec libfaac -aq 100 -vcodec libx264 -preset slow -crf 22 -потоки 0 /home/geoff/Desktop/newvideo.flv');

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Я бы пошел за кронами или просто создал бы другой скрипт php, который будет выполнять конвертацию. После того, как пользователь отправит форму, обработайте ее и отправьте данные с $ _POST в сценарий конвертера видео и выполните его, не ожидая ответа.

Вот пример из моего фреймворка, который вы можете изменить в соответствии со своими потребностями.

<code># Executing The Script
$data = array();
$data['start'] = 0;
$data['end'] = 20;

$url = SITE_ROOT.CRONS_DIR.$found->path."/".$found->name.".php";

$response = curlPost($url,$data,3,TRUE);

if ($response){
echo "<pre>";
echo htmlentities($response);
}

# curlPost function

function curlPost($url, $postArray = NULL, $timeout=2, $errorReport=FALSE) {
    # PREPARE THE POST STRING
    if ($postArray != NULL) {
        $postString = '';
        foreach ($postArray as $key => $val) {
            $postString .= urlencode($key) . '=' . urlencode($val) . '&';
        }
        $postString = rtrim($postString, '&');
    }

    # PREPARE THE CURL CALL
    $curl = curl_init();
    curl_setopt( $curl, CURLOPT_URL,            $url         );
    curl_setopt( $curl, CURLOPT_HEADER,         FALSE        );
    curl_setopt( $curl, CURLOPT_POST,           TRUE         );
    ($postArray != NULL) ? curl_setopt( $curl, CURLOPT_POSTFIELDS,     $postString ) : '';
    curl_setopt( $curl, CURLOPT_TIMEOUT,        $timeout     );
    curl_setopt( $curl, CURLOPT_RETURNTRANSFER, TRUE         );

    # EXECUTE THE CURL CALL
    $htm = curl_exec($curl);
    $err = curl_errno($curl);
    $inf = curl_getinfo($curl);

    # ON FAILURE
    if (!$htm) {
        # PROCESS ERRORS HERE
        if ($errorReport) {
            echo "CURL FAIL: {$url} TIMEOUT={$timeout}, CURL_ERRNO={$err}";
            echo "<pre>\n";
            var_dump($inf);
            echo "
\ п "; createLog ("CURL FAIL: {$ url} TIMEOUT = {$ timeout}, CURL_ERRNO = {$ err}"); } curl_close ($ завиток); вернуть ЛОЖЬ; } # НА УСПЕХ curl_close ($ завиток); вернуть $ htm; }

EDIT: Вы можете прочитать руководство по cURL . Это не имеет ничего общего с $ _FILE.

Позвольте мне объяснить вам по-другому;

  • У вас есть form.php ; это страница, где пользователи видят форму и отправьте форму.
  • У вас есть upload.php или form_process.php ; эта страница собирается записывать любые данные, необходимые от пользователя отправил форму в вашу базу данных.

На странице, на которой вы обрабатываете данные, отправленные пользователем, просто запишите их в базу данных, загрузите файл, после загрузки файла подготовьте массив $ _POST или любой массив с информацией, которая вам необходима для преобразования файла.

Например;

$data['id'] = 100; //ID in the database
$url = "video_converter.php";
$response = curlPost($url, $data, 3, TRUE);

В video_converter.php -> просто получите идентификатор с помощью $ _GET, сразу после поиска записи в базе данных, и конвертируйте файл, обновите запись.

Конечно, как я уже сказал, вам нужно изменить написанную выше функцию curlPost для ваших собственных нужд. И если у вас есть вопросы о том, что такое cURL, я настоятельно рекомендую вам сначала прочитать руководство cURL . Если у вас остались вопросы, вы всегда можете задать другой вопрос, верно?

1 голос
/ 09 июня 2011

Я думаю, это многое прояснит для вас.Несколько похожих вопросов были опубликованы здесь ранее.

http://wezfurlong.org/blog/2005/may/guru-multiplexing/

Кроме того, поиск «асинхронный PHP» дает гораздо больше информации.Очевидно, вам придется отредактировать приведенный выше пример, но асинхронная методология - это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...