我有一个让我发疯的问题。我有一个PHP脚本,可以将文件上传到目录中。然后我可以用ffmpeg转换它但我不希望用户必须在该页面上等待,我希望它们能够在文件上运行ffmpeg时更改页面。我怎样才能实现这一点,我是使用批处理还是使用cron或什么?处理文件后,我如何能够与我的Web应用程序通信,我是否在cmd中运行php文件以添加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 -threads 0 /home/geoff/Desktop/newvideo.flv');
答案 0 :(得分: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无关。
让我用不同的方式解释你;
在您处理用户提交数据的页面中,只需将其记录到数据库,上传文件,上传文件后,准备$ _POST数组或任何包含转换文件所需信息的数组。
例如;
$data['id'] = 100; //ID in the database
$url = "video_converter.php";
$response = curlPost($url, $data, 3, TRUE);
在video_converter.php中 - &gt;只需在$ _GET中获取ID,在找到数据库中的记录后立即转换文件,更新记录。
当然,正如我所说,你需要修改我上面写的curlPost函数以满足你自己的需要。如果您对什么是cURL有疑问,我强烈建议您先阅读cURL manual。如果您还有疑问,可以随时提出另一个问题吗?
答案 1 :(得分:1)
我认为这对你来说很清楚。之前已经发布了一些类似的问题。
http://wezfurlong.org/blog/2005/may/guru-multiplexing/
此外,搜索“PHP异步”会产生更多信息。显然你必须编辑上面的例子,但异步方法是你正在寻找的。 p>