Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Редирект после нажатия ссылкы для скачивания файла (http://forum.oszone.net/showthread.php?t=41626)

vadimiron 26-11-2004 03:42 275515

Редирект после нажатия ссылкы для скачивания файла
 
Недавно встретил этот вопрос на одном немецком форуме и сам озадачился данной проблемой.
Как же перенаправлять юзера после того, как он нажал на ссылку файла для скачивания? ПерепробЫвал пару вариантов, но ничего не получается.

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

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

ihc 26-11-2004 03:56 275517

Я использую RESPONSE.redirect(), но это в немного не в пхп.

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

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

Vlad Drakula 26-11-2004 04:05 275518

vadimiron
ты пробел забыл!!!!

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

PHP код:

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


vadimiron 27-11-2004 15:37 275918

Vlad Drakula
Нее, дело не в этом
Получается, что с пробелом или без него, этот код не работает

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

Первое предположение типа
HTML код:

<a href="file.ext" onclick="document.location.href='next.php'";>FILE</a>
не работает

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

<?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 275931

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

Vlad Drakula 27-11-2004 23:41 276004

vadimiron
что то ты не то делаешь...
то что я написал работает и причем достаточно стабильно!

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


Время: 02:39.

Время: 02:39.
© OSzone.net 2001-