Ric*_*AHB 4 php redirect header download hide
我知道这个问题以前曾被问过多次,但我找不到符合我需要的答案.
我需要找到一种强制下载文件的方法,然后在下载开始后,重定向到"感谢下载"页面.
到目前为止,我有:
<?php
ob_start();
$token = $_POST['validationCode'];
if(isset($token)){
$connect = mysql_connect('localhost', 'root', 'root');
$db = mysql_select_db('mydb');
if (!$connect || !$db){
die('Connect Error (' . mysql_connect_errno() . ') '
. mysql_connect_error());
}
$sql = mysql_query("SELECT * FROM emailaddresses WHERE token='$token'");
$result = mysql_fetch_array($sql);
if($result){
header('Location: complete.php');
header('Content-type: application/mp3');
header('Content-Disposition: attachment; filename=track.mp3');
$f = file_get_contents('downloads/track.mp3');
print $f;
$sql = "UPDATE emailaddresses SET download=1 WHERE token='$token'";
$result = mysql_query($sql);
}
else{
echo "There was a problem downloading the file" . mysql_error();
}
}
ob_end_flush();
?>
Run Code Online (Sandbox Code Playgroud)
隐藏下载文件的位置很重要,否则我就会创建一个指向该文件的HTML链接.
我显然不能将重定向标题放在其他标题下面,因为它不起作用.除了在弹出窗口中打开它并将主窗口指向"谢谢"页面之外,我无法真正看到从这里开始的地方 - 但这是一个最后的度假胜地.
谁能提出任何建议?
干杯,
丰富
真的没有太多选择.如果您的主要目标是隐藏URL,那么无论如何这都是失败的原因.为了获得良好的可用性,您通常会在页面上包含纯链接("下载无法启动?单击此处 ..."),因为用户可能会在错误的时间意外取消重定向,从而不可挽回地终止下载.
您不能在同一请求/响应中输出除文件本身之外的任何内容.您可以尝试@netcoder建议的多部分HTTP响应,但我不确定它的支持程度如何.首先假设有一个"浪费"的请求/响应,其中只下载文件而没有其他任何事情发生.通常使用此限制的方式如下:
<meta>刷新或HTTP Refresh标头,导致延迟重定向到文件的URL.请查看http://download.com以获取此操作的示例.
您可以将文件的下载位置设置为仅在允许用户下载文件时才返回文件的脚本.您可以在"谢谢"页面和文件下载页面之间传递一些临时令牌,以验证是否允许下载.
| 归档时间: |
|
| 查看次数: |
19099 次 |
| 最近记录: |