我想要使用有效URL访问我的网站的用户(在数据库中检查get参数)
能够从服务器下载文件,而其他没有使用有效URL访问网站的人则无法这样做。
目前我可以做
if (isValid($get_param))
{
print link to file
} else {
print some other message
}
这很好,但不会阻止某人简单地访问文件(如site.com/file.mp3
)的直接链接。
如果URL有有效的get参数,我如何阻止某人以这种方式下载文件,但允许他们下载?
您必须在服务器上的文件权限中执行此操作。
只允许PHP代码访问该文件。
您可以考虑将受保护的文件移到web服务器文档根目录之外以避免直接访问,然后将readfile()
与header()
结合使用以强制下载,如readfile() manual page
上的第一个示例所示。
与其打印链接,不如在验证后尝试添加此代码。
$file = "something.zip/pdf";
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".$file);
header("Content-Description: File Transfer");
@readfile($file);
这将直接启动下载,用户无法知道文件来自
您必须用PHP处理下载,以防止未经授权的访问:
$file = "path/to/file.mp3";
header("Content-Disposition: attachment; filename=".basename( $file ));
header("Content-Type: audio/mpeg"); // you need the correct mime-type for your file
header("Content-Length: ". filesize( $file ) );
header("Content-Transfer-Encoding: binary");
readfile($file);
exit;