例如,如果用户想要下载/webroot/files/bigimage.jpg,则会给他们一个URL www.domain.com/download.php?filename=bigimage.jpg.然后,
编辑:让问题更清晰.
我正在使用LAMP堆栈.对于Q1,我不问如何进行身份验证,我问如何阻止用户直接访问该文件.此外,读取整个文件的内容并回显它们是资源广泛的.有更好的解决方案吗?
第一步,将.htaccess文件放在文件夹中,图像上显示"全部拒绝".这将阻止任何人访问该文件,即使他们知道该文件夹.
然后,你编写使用像这样的PHP函数
$file = 'path/to/folder' . $filename;
//Make sure you check that $filename does not contain ".." for security
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
} else {
//Show error message
}
Run Code Online (Sandbox Code Playgroud)
您应该检查会话变量以查看用户是否已登录并具有可以下载此角色的角色.此代码也将强制下载图像而不是显示它.