我正在制作文件共享网站以获得乐趣。试图使它在我下载时开始下载。而不仅仅是/files/$file
尝试进行标题重定向的链接:
的download.php
/**
* File Download
*/
$query = mysql_query("SELECT id,name,desc FROM files WHERE id = ".intval($_GET['id']));
$row = mysql_fetch_assoc($query);
$file = $row['name'];
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>
Filename: <?=$row['name']?>
Desc: <?=$row['desc']?>
<a href="#">Download this file</a>
我被困在这里,接下来该怎么办?
谢谢
答案 0 :(得分:2)
你的意思是这样的,页面会显示有关文件的信息,然后当用户点击链接时会下载它吗?
<?php
$query = mysql_query("SELECT id,name,desc FROM files WHERE id = ".intval($_GET['id']));
$row = mysql_fetch_assoc($query);
$file = $row['name'];
if(!file_exists($file))
{
exit('File does not exist');
}
if(intval($_GET['download'])===1)
{
// Generate the server headers
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
{
header('Content-Type: "application/octet-stream"');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-Transfer-Encoding: binary");
header('Pragma: public');
header("Content-Length: ".filesize($file));
}
else
{
header('Content-Type: "application/octet-stream"');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header("Content-Transfer-Encoding: binary");
header('Expires: 0');
header('Pragma: no-cache');
header("Content-Length: ".filesize($file));
}
$data = readfile($file);
exit($data);
}
else
{
?>
Filename: <?php echo $row['name']; ?>
Desc: <?php echo $row['desc']; ?>
<a href="<?php echo $_SERVER['SCRIPT_NAME']; ?>?id=<?php echo $row['id']; ?>&download=1">Download this file</a>
<?php
}
?>
答案 1 :(得分:1)
我不是在追问你的要求。标头重定向如下所示:
header("Location: /path/to/new/page");
如果您想要下载现有信息,看起来您需要在网址中使用ID来点击它:
<a href="file.php?id=<?=$file_id ?>">
其中$file_id
具有您要查找的文件的ID。就个人而言,我将其放在显示列表和下载链接的页面中的另一个文件中,但是YMMV。
答案 2 :(得分:0)
您只能在推送任何html之前进行重定向。
基本上是在
之后Filename: <?=$row['name']?>
Desc: <?=$row['desc']?>
<a href="#">Download this file</a>
被发送到浏览器,您使用php执行重定向的机会已经结束。也许Javascript重定向更合适? Tutorial on Javascript redirects.