PDA

Показать полную графическую версию : Редирект после нажатия ссылкы для скачивания файла


vadimiron
26-11-2004, 03:42
Недавно встретил этот вопрос на одном немецком форуме и сам озадачился данной проблемой.
Как же перенаправлять юзера после того, как он нажал на ссылку файла для скачивания? Перепробывал пару вариантов, но ничего не получается.

Думал получится так: с помощью Header сделал диалог форсирования скачивания (иначе говоря, можно просто заголовками предложить скачать файл без нажатия на какую то ссылку), и после этих Хедеров вставил ещё один: header("Location:tuda.html")
Что самое интересное, браузер не реагирует на этот последний хедер, он просто предлагает загрузить файл и дальше ничего не происходит

Так что решение проблемы я пока не вижу

ihc
26-11-2004, 03:56
Я использую RESPONSE.redirect(), но это в немного не в пхп.

Не очень понял задачу. Предположим, ссылка ведёт на /files/redirect, а тот должен выдать нужный файл, так? На нижнем уровне -- mod_rewrite, на уровне хидеров -- выдать код 302 и хидер location, на уровне html -- можно через meta, можно через JS.

Смотря зачем этот редирект нужен.

Vlad Drakula
26-11-2004, 04:05
vadimiron
ты пробел забыл!!!!

этот код работает:


header('Location: '.$Redirect);
header('Pragma: no-cache');

vadimiron
27-11-2004, 15:37
Vlad Drakula
Нее, дело не в этом
Получается, что с пробелом или без него, этот код не работает

Ещё раз поясняю, что нужно: Нужен делать редирект после того, как юзер нажал на ссылку файла (то есть чтобы скачать файл).

Первое предположение типа
<a href="file.ext" onclick="document.location.href='next.php'";>FILE</a>
не работает

Потом я покапался в инете и узнал, что можно с помощью хедеров сделать так, чтобы юзеру предлагалось скачать файл, при этом, чтобы он предварительно никаких ссылок на данный файл не нажимал, поэтому моё второе предположение было:

<?php
if (isset($download))
{
$myfile = "file.ext";
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=".basename($myfile).";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($myfile));
readfile("$myfile");
header("Location: next.php");
}
?>
<html>
<head>
<title></title>
</head>
<body>
<a href="?download=go"> FILE</a>
</body>
</html>

То есть при нажатии на ссылку, данная страница перезагружается с созданной переменной download, поэтому выполняется условие if, и сразу предлагается юзеру загрузить файл. Но так тоже не получается, потому что header("Location: next.php"); не выполняется.

Вообще, я пока не вижу решения данной задачи.
Единственное, что приходит в голову, так это поизвращаться с Java Script.
Например так:
При нажатии на ссылку с помощью Java Script создаём окно, содержанием которого являются эти самые хедеры, позволяющие сразу предлагать загружать файл, далее в родительском окне отсчитываем, например, 3 секунды (за это время хедеры точно должны быть обработаны), и по истечению 3 секунд закрываем дочернее окно

Какие ещё есть идеи
??????????????????????????????????????????????????????????????

mar
27-11-2004, 16:34
vadimiron
с хедерами в одном и том же файле файле действително и не должно получиться.
Когда у меня была аналогичная задача, я давала возможность нажать на "скачать" во всплывающем окне, а по закрытии этого самого дочернего окна рефрешила родительское. То есть почти такое же решение =)
В качестве дополнительного наворота по onClick это самое "скачать", помнится превращалось в "закрыть".

Vlad Drakula
27-11-2004, 23:41
vadimiron
что то ты не то делаешь...
то что я написал работает и причем достаточно стабильно!

может тебе немного поменять логику?




© OSzone.net 2001-2012