PHP:如何隐藏URL

PHP:如何隐藏URL,php,download,Php,Download,我有下面的download.php脚本来下载一个文件,效果非常好: <?php header("Content-Type: application/octet-stream"); $file = $_GET["file"]; header("Content-Disposition: attachment; filename=" . urlencode($file)); header("Content-Type: application/force-download"); head

我有下面的
download.php
脚本来下载一个文件,效果非常好:

<?php

header("Content-Type: application/octet-stream");

$file = $_GET["file"];
header("Content-Disposition: attachment; filename=" . urlencode($file));   
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");            
header("Content-Length: " . filesize($file));
flush(); 
$fp = fopen($file, "r");
while (!feof($fp))
{
    echo fread($fp, 65536);
    flush(); 
} 
fclose($fp);

?>

我想要实现的是隐藏此文件所在的URL,这样当用户单击链接(如
)时,将打开一个没有URL的新选项卡,并开始向下隐藏该文件。实际情况是,新选项卡打开,文件下载开始,但URL栏显示
http://domain.com/files/download.php?file=filename.pdf

如果php不能做到这一点,我如何才能做到这一点?我看过一些没有显示URL的下载,所以我知道这在某种程度上是可能的

编辑:我想这样做的原因是:我们将发送一封带有文件下载链接的html邮件,而该文件下载所在的网站不是发送邮件的公司的网站


一如既往,非常感谢。

最后,这是不可能的,因为用户可以打开Google Inspector并检查网络选项卡

编辑:如果是这样,您可以使用JavaScript:

编辑2:如果弹出窗口被浏览器或加载项阻止,请使用回退:

编辑3:如果JS被禁用:

<head><meta http-equiv="refresh" content="5;http://domain.com/files/download.php?file=filename.pdf"> 
    <script>
     var win = window.open("http://domain.com/files/download.php?file=filename.pdf");
      if (!win) {
               window.location = "http://domain.com/files/download.php?file=filename.pdf";      
      }
    </script>
  </head>

您可以创建一个新窗口,将iframe内容添加到该URL

var win = window.open("", "Title", "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=780, height=200, top="+(screen.height-400)+", left="+(screen.width-840));
win.document.body.innerHTML = "<iframe src='YOUR URL'></iframe>";
var win=window.open(“,”Title“,”toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizeable=yes,width=780,height=200,top=“+(screen.height-400)+”,left=“+(screen.width-840));
win.document.body.innerHTML=“”;

执行此操作的典型方法是将要提供下载的文件放在docroot之外。 您的下载脚本应该知道这个地方,并且必须处理请求的文件名

例如:

path/in/your/system/docroot/download.php
path/in/your/system/files/filename.pdf


如果有人请求
download.php?file=filename.pdf
您的脚本必须在
path/in/your/system/files/
中查找此文件并处理它。

如果您删除
目标=“\u blank”
不会打开新选项卡,文件将被下载。

以POST方式提交表单,并使用$\u请求获取文件:

$file = $_REQUEST["file"];

大多数浏览器不允许这样做。人们仍然可以检查元素。最好的选择是将文件名存储在数据库中并链接到id,如下所示:
http://domain.com/files/download.php?id=123
然后查询数据库,从那里获取文件。人们将不会看到文件名。和/或将文件名发布到download.php,而不是将其作为查询字符串参数发送。添加一个用户令牌并在PHP端要求它将需要用户登录才能下载。除了@GetOfMyLawn,您可以实现允许下载此特定链接的最大次数(比如三次)。@GetOfMyLawn我希望人们不要看到(在URL栏中)下载它的域。如果他们真的想知道他们可以检查,这是可以的,我只想为大多数普通用户隐藏它。可以使用
mod_proxy
稍微隐藏它。这不是PHP特有的,我知道,但普通用户不会这么做。他只需下载文件并关闭选项卡。@pablito.aven如果是这样,使用JavaScript打开一个新窗口,指向您的文件下载脚本。您可以将电子邮件链接指向输出该JavaScript的PHP脚本。因此,您的电子邮件将指向:LinkProvider.PHP,它输出上述JavaScript,然后指向您的下载脚本。上述编辑应该可以工作。提供的meta标记将在5秒后重定向到PDF(如果启用了JS,这对于您的JS来说已经足够加载时间了)。
$file = $_REQUEST["file"];