PHP:使用有效的get参数限制文件下载到URL的简单方法


PHP: Simple way to Limit File downloads to URLs with valid get parameters

我想要使用有效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;