有没有办法不允许直接访问文件,但允许使用IIS通过PHP脚本下载?

有没有办法不允许直接访问文件,但允许使用IIS通过PHP脚本下载?,php,iis,Php,Iis,我目前有一个php脚本,用于下载,您可以在下面查看。它工作得很好,但我想要它,所以即使你有一个文件的直接链接,你也不能用它来下载它。我目前正在使用IIS 7。我看到有请求过滤,但我不知道如何使用它而不完全阻止对文件的访问 $extension = fileexten($filename); if(($filename!= false)&&($fakename!=false&& @fopen($filename,'r')==true)){ $mime = conte

我目前有一个php脚本,用于下载,您可以在下面查看。它工作得很好,但我想要它,所以即使你有一个文件的直接链接,你也不能用它来下载它。我目前正在使用IIS 7。我看到有请求过滤,但我不知道如何使用它而不完全阻止对文件的访问

$extension = fileexten($filename);
if(($filename!= false)&&($fakename!=false&& @fopen($filename,'r')==true)){
$mime = contenttype($extension);
set_time_limit(0);
header('Pragma: public');
header('Expires: 0'); 
header("Content-Type:".$mime);
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);        
header('Content-Disposition: attachment;filename='.$fakename.'.'.$extension);
header("Content-Transfer-Encoding: binary");

  if (ob_get_length() > 0) {
    ob_end_clean();
    }
flush();
readfile($filename);
}
else{
$error = "<h3>We could not find this file</h3>";} // If the filename or fake filename could not be retrieved. 
}
$extension=fileexten($filename);
if($filename!=false)&&($fakename!=false&&@fopen($filename,'r')==true)){
$mime=contenttype($extension);
设置时间限制(0);
标题(“Pragma:public”);
标题('Expires:0');
标题(“内容类型:.$mime”);
标头('Cache-Control:必须重新验证,后检查=0,前检查=0');
标头('Cache-Control:private',false);
标题('Content-Disposition:attachment;filename='.$fakename.'.$extension);
标题(“内容传输编码:二进制”);
如果(ob_get_length()>0){
ob_end_clean();
}
冲洗();
readfile($filename);
}
否则{
$error=“我们找不到此文件”;}//如果无法检索文件名或假文件名。
}

我可以按照这些说明来操作


您是否尝试过将文件移出公用文件夹?这样就不会有公开下载链接了。我试过了,但运气不好。这些文件会立即下载,并且是空的。如果它在公用文件夹之外,你应该无法获得指向该文件的链接。我说的是下载脚本。下载脚本是否能够访问公用文件夹之外的内容?是的,许多MVC框架都在公用文件夹之外。然而,更多的调查表明,IIS似乎不允许这样做。这可能有助于: