2011-06-09 57 views
0

我有一個讓我發瘋的問題。我有一個php腳本將文件上傳到目錄中。然後我可以用ffmpeg將其轉換,但我不希望用戶不得不在該頁面上等待,我希望他們能夠在ffmpeg正在文件上運行時更改頁面。我怎麼能做到這一點,我使用批處理或cron或什麼?一旦文件被處理,我將如何能夠與我的web應用程序進行通信,我是否在cmd中運行php文件以添加mysql條目?在後臺運行ffmpeg,因此可以更改頁面

這是我的ffmpeg,如果有人能給我一些清晰的話,我會非常感激。在這一點上,我願意捐出一半的分數。

$命令= 了shell_exec('的/ usr/local/bin中/ ffmpeg的-i /home/geoff/Desktop/cave.wmv -acodec libfaac -aq 100 -vcodec libx264 -PRESET慢-crf 22 -threads 0 /home/geoff/Desktop/newvideo.flv');

回答

2

我會去crons或只是創建另一個PHP腳本,將做轉換。用戶提交表單後,處理表單並將$ _POST數據發送到視頻轉換器腳本並執行它,而不用等待響應。

下面是我的框架中的一個示例,您可以根據需要進行修改。

# 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 "</pre>\n"; 
      createLog("CURL FAIL: {$url} TIMEOUT={$timeout}, CURL_ERRNO={$err}"); 
     } 
     curl_close($curl); 
     return FALSE; 
    } 

    # ON SUCCESS 
    curl_close($curl); 
    return $htm; 
} 

編輯: 您可以閱讀cURL manual。這與$ _FILE無關。

讓我以不同的方式解釋你;

  • 您有form.php;這是 頁面,用戶在這裏看到表單,並提交表單 。
  • 您有upload.phpform_process.php;此頁面將要 將用戶提交的所有需要​​的數據記錄到您的數據庫。

在您正在處理用戶提交的數據的頁面中,只需將其記錄到數據庫,上傳文件,上傳文件後,準備$ _POST數組或包含需要轉換文件的信息的任何數組。

例如;

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

在video_converter.php - >剛剛得到與$ _GET的ID,發現右後在數據庫中的記錄,並且轉換的文件,更新記錄。

當然,正如我所說的,您需要修改我上面寫到自己需要的curlPost函數。如果您對cURL有什麼疑問,我強烈建議您先閱讀cURL manual。如果你仍然有問題,你可以問另一個問題總是正確的?

+0

謝謝Pixeler,我很欣賞它,但是我究竟在看什麼?什麼是捲曲,腳本在做什麼?表單是否發佈到$ _FILE? ffmpeg在哪裏?我用exec來執行它。 – Scarface 2011-06-09 20:21:37

+0

這是用於文件上傳後的文件嗎? – Scarface 2011-06-09 20:44:46

+1

對不起,我昨天休息了。我剛剛醒來,所以我希望我已經清楚了( – Revenant 2011-06-12 13:00:43