我不知道如何写出更好的标题。随意编辑。不知怎的,我没有找到任何关于此的内容:
我有来自PHP的cURL请求,它返回一个quicktime文件。如果我想在浏览器的窗口中输出流,这可以正常工作。但我想发送它,因为它是一个真实的文件。如何传递标题并将其设置为脚本的输出,而无需将所有内容存储在变量中。
脚本如下所示:
if (preg_match('/^[\w\d-]{36}$/',$key)) {
// create url
$url = $remote . $key;
// init cURL request
$ch = curl_init($url);
// set options
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 256);
if (null !== $username) {
curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
}
// execute request
curl_exec($ch);
// close
curl_close($ch);
}
我可以看到这样的标题和内容,因此请求本身工作正常:
HTTP / 1.1 200 OK X-Powered-By:Servlet / 3.0 JSP / 2.2(GlassFish Server开源版3.1.2 Java / Oracle Corporation / 1.7)服务器:GlassFish Server开源版3.1.2内容类型: video / quicktime Transfer-Encoding:chunked
答案 0 :(得分:2)
从您的卷曲查询中获取内容类型:
$info = curl_getinfo($ch);
$contentType = $info['content_type'];
并将其发送给客户:
header("Content-Type: $contentType");
答案 1 :(得分:0)
试试这个:
header ('Content-Type: video/quicktime');
输出内容之前
答案 2 :(得分:0)
因此,在之前的答案的帮助下,我得到了它的工作。在我看来,它仍有一个要求,但也许有人有更好的方法。
发生的问题:
1。)当使用这样的cURL时:
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
标头未返回内容类型,只返回*\*
。
2。)使用curl_setopt($ch, CURLOPT_NOBODY, false);
获得了正确的内容类型,但也获得了整个内容本身。所以我可以将所有内容存储在变量中,读取标题,发送内容。不知何故不是一个选择。
所以我必须在获取内容之前使用get_headers($url, 1);
请求标题。
3.)最后,有一个问题是HTML5-video-tag和jwPlayer都不想播放'index.php'。所以使用mod_rewrite并将'name.mov'设置为'index.php'就可以了:
RewriteRule ^(.*).mov index.php?_route=$1 [QSA]
if (preg_match('/^[\w\d-]{36}$/',$key)) {
// create url
$url = $remote . $key;
// get header
$header = get_headers($url, 1);
if ( 200 == intval(substr($header[0], 9, 3)) ) {
// create url
$url = $remote . $key;
// init cURL request
$ch = curl_init($url);
// set options
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 256);
if (null !== $username) {
curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
}
// set header
header('Content-Type: ' . $header['Content-Type']);
// execute request
curl_exec($ch);
// close
curl_close($ch);
exit();
}
}