PHP文件下载问题-停止重定向,如果文件不存在,而使用GET方法


PHP file download issue - stop redirection if file does not exist while using GET method

我有main.php文件,在其中我有许多"子页面"(有选项卡,你可以切换它们,所以http://mydomain.com/main.php地址不会改变)。我通过ajax请求动态地接收它们。在一个这样的"子页面"我有下载链接。例如

                  <a href="dwnl.php?file=fish.avi">fish</a>

在dwnl。php文件中有这样的内容

 // . . . . .
 $file =basename($_GET['file']);
 if(file_exists($file))
 {
   // download file
 }
 else  exit;

我的问题发生时,文件不存在(即在'else'块我的dwnl.php文件)。如果用户点击这样的链接,浏览器会将他们重定向到http://mydomain.com/dwnl.php?file=…地址。我怎样才能禁止这种重定向?我想用PHP(如果可能的话)。在else块中我应该做什么?

在其他情况下,你可以重定向到$_SERVER['HTTP_REFERER'];这是重定向到您的参考页面。

Else(如果可能的话)提前检查

您可以检查file_exist并放置href,如果文件存在。

根据脚本的设置方式,一个可能的解决方案是使用头重定向。

<?php
header( "LOCATON: /not-found.php" );
die();
?>

这将使用户重定向到您想要的任何页面。正如其他人已经说过的那样,您应该非常小心地以这种方式处理文件下载,以防止各种漏洞利用。我会在传递给抓取文件内容的任何函数之前对文件名进行消毒,并将可能的下载目录限制为只从您绝对需要的位置下载。也不要相信open_basedir会在上述任何情况下保护您。

1)你可以输出一个简单的html错误消息和一个超时的元刷新标签。
5秒后重定向到http://example.com/:

<meta http-equiv="refresh" content="5;URL='http://example.com/'">

2)你可以使用header()直接重定向,不需要任何消息:

header("Location: http://site.com/page?var=123");
3)你可以设置错误404 file not found:
header('HTTP/1.0 404 Not Found', true, 404);