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"];