我正在创建一个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 );
答案 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/PHP和http://www.yiiframework.com/wiki/129/x-sendfile-serve-large-static-files-efficiently-from-web-applications/