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

PHP文件下载问题-使用GET方法时,如果文件不存在,请停止重定向,php,Php,我有main.php文件,其中有许多“子页面”(有选项卡,您可以切换它们,这样地址就不会改变)。我通过ajax请求动态地接收它们。在其中一个“子页面”上,我有下载链接。比如说 <a href="dwnl.php?file=fish.avi">fish</a> 当文件不存在时(即在dwnl.php文件的“else”块中),就会出现问题。如果用户单击此类链接,浏览器会将其重定向到。。。地址。我怎样才能禁止这种重定向?我想用PHP来做(如果

我有main.php文件,其中有许多“子页面”(有选项卡,您可以切换它们,这样地址就不会改变)。我通过ajax请求动态地接收它们。在其中一个“子页面”上,我有下载链接。比如说

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

当文件不存在时(即在dwnl.php文件的“else”块中),就会出现问题。如果用户单击此类链接,浏览器会将其重定向到。。。地址。我怎样才能禁止这种重定向?我想用PHP来做(如果可能的话)。那么,在“其他”区我该怎么办

在else中,您可以重定向到$\u服务器['HTTP\u REFERER']; 这是重定向到你的推荐页面

如果可能,请提前检查
您可以检查file_exist并在文件存在时放置href。

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

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

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

1)您可以输出带有错误消息和超时标记的简单html。
5秒后重定向到:

<meta http-equiv="refresh" content="5;URL='http://example.com/'">
3) 您可以将错误设置为“找不到文件”404

header('HTTP/1.0 404 Not Found', true, 404);

您的脚本似乎很容易下载任意文件(即路径遍历)。是的,我知道,这只是一个玩具示例。为什么不在
文件存在时才下载链接?如果文件不存在,则无需下载。所以,我只是检查一下这个条件。非常感谢您的anwser Biswajit,但它不起作用。您试过第二个选项吗?“如果可能的话,你可以检查文件存在,如果文件存在,请放置HREF。”你也可以在第二种方法中发布你所犯的错误,这是一个很好的选择,但是我想考虑我的代码中的任何一种情况。但若文件不存在,浏览器仍会将我重新安装到“dnwl.php?file=fish.avi”页面。我不想刷新我的页面,因为正如我在问题中提到的,我在main.php文件上有通过ajax请求获得的动态内容。因此,如果页面正在刷新,内容将丢失。谢谢您的回答,但我不想在任何地方重新定向用户。我希望保持“main.php”页面不变,即使文件不存在。我不想使用header(“location:main.php”),因为它会刷新整个页面。
header("Location: http://site.com/page?var=123");
header('HTTP/1.0 404 Not Found', true, 404);