Заголовок - PullRequest
       12

Заголовок

2 голосов
/ 14 июля 2009

Я делаю сайт для обмена файлами для удовольствия. Попытка сделать так, чтобы, когда я нажимал на загрузку, она начинала загрузку. Вместо ссылки на /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 ]

2 голосов
/ 14 июля 2009

Вы имеете в виду что-то вроде этого, где на странице будет отображаться информация о файле, а затем, когда пользователь нажал на эту ссылку, он загрузит его?

<?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 голос
/ 14 июля 2009

Я не понимаю, что вы спрашиваете. Перенаправление заголовка выглядит так:

header("Location: /path/to/new/page");

Если вы хотите, чтобы существующая информация загружалась, похоже, вам нужно нажать на нее с идентификатором в вашем URL:

<a href="file.php?id=<?=$file_id ?>">  

где $file_id имеет идентификатор файла, который вы ищете. Лично я поместил бы это в другой файл со страницы, которая показывает список и ссылку для скачивания, но YMMV.

0 голосов
/ 14 июля 2009

Вы можете сделать перенаправление только до того, как какой-либо html-файл будет отправлен.

В основном после

Filename: <?=$row['name']?>
Desc: <?=$row['desc']?>

<a href="#">Download this file</a>

отправлено в браузер, ваш шанс выполнить редирект с помощью php закончился. Может быть, перенаправление Javascript более уместно? Учебник по перенаправлениям Javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...