PHP显示没有大量内存的视频/图像

时间:2014-04-07 10:49:57

标签: php apache .htaccess mod-rewrite

我正在创建一个PHP访问处理程序文件,该文件将根据用户是否拥有授权将图像和视频提供给用户。

我需要阻止对文件的直接访问,以确保无法绕过用户身份验证,这是最有效的方式来提供图像和视频而不会占用太多内存?

我尝试使用下面的X-SendFile,但这只允许您下载文件而不显示它们,我希望能够自动获取文件标题(它们更可能是.mp4视频和.jpgs)

<?PHP
$file = $_GET['f'];
$filepath = $_GET['fp'];
//if auth success (security will be put in here)
if(TRUE == TRUE){
    header("Content-type: application/octet-stream");
    header('Content-Disposition: attachment;filename='.$file);
    header('X-Sendfile: '.$filepath);
}else{ echo "Unauthorized access"; exit(); }
?>

**更新**

试图让它工作但却出错。

//Get media file content type
$finfo = finfo_open(FILEINFO_MIME_TYPE);
//Display correct headers for media file
header("Content-type:   ".finfo_file($finfo, $filepath));
//echo "here".finfo_file($finfo, $filepath); 
finfo_close($finfo);
header('Content-length: '.filesize($filepath));
header('Content-Disposition: inline; filename="'.$file.'"');
header('X-Sendfile: ' . $filepath );

1 个答案:

答案 0 :(得分:1)

<强>更新

关于Content-Disposition标题。

  

如果在带有application / octet-stream内容类型的响应中使用此标头,则隐含的建议是用户代理不应显示响应,而是直接输入“save response as ...”对话框。
   - http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1


使用您的网络服务器的sendfile功能。

使用Apache,您可以发送X-Sendfile标头来指示它只传递文件:

header("X-Sendfile: $filepath");

另请参阅Using X-Sendfile with Apache/PHPhttp://www.yiiframework.com/wiki/129/x-sendfile-serve-large-static-files-efficiently-from-web-applications/