php标题下载重定向

时间:2009-07-14 04:34:18

标签: php header

我正在制作文件共享网站以获得乐趣。试图使它在我下载时开始下载。而不仅仅是/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>

我被困在这里,接下来该怎么办?

谢谢

3 个答案:

答案 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.