Показать полную графическую версию : Редирект после нажатия ссылкы для скачивания файла
vadimiron
26-11-2004, 03:42
Недавно встретил этот вопрос на одном немецком форуме и сам озадачился данной проблемой.
Как же перенаправлять юзера после того, как он нажал на ссылку файла для скачивания? Перепробывал пару вариантов, но ничего не получается.
Думал получится так: с помощью Header сделал диалог форсирования скачивания (иначе говоря, можно просто заголовками предложить скачать файл без нажатия на какую то ссылку), и после этих Хедеров вставил ещё один: header("Location:tuda.html")
Что самое интересное, браузер не реагирует на этот последний хедер, он просто предлагает загрузить файл и дальше ничего не происходит
Так что решение проблемы я пока не вижу
Я использую 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 секунд закрываем дочернее окно
Какие ещё есть идеи
??????????????????????????????????????????????????????????????
vadimiron
с хедерами в одном и том же файле файле действително и не должно получиться.
Когда у меня была аналогичная задача, я давала возможность нажать на "скачать" во всплывающем окне, а по закрытии этого самого дочернего окна рефрешила родительское. То есть почти такое же решение =)
В качестве дополнительного наворота по onClick это самое "скачать", помнится превращалось в "закрыть".
Vlad Drakula
27-11-2004, 23:41
vadimiron
что то ты не то делаешь...
то что я написал работает и причем достаточно стабильно!
может тебе немного поменять логику?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.