Автор оригинала: phprus
Как ридерект то делать? После того как отправлено тело ответа уже нельзя выдать заголовок location.
Во первых это можно сделать через JS, но опять же можно же в самом начале скрипта (до каких либо заголовков) проверать докачен ли файл.
Я вижу идея не совсем понятна...
В общем скрипт, назовем его download.php в нем даеться ссылка на скрипт выдачи файла назовем его get.php
в download.php ссылку даем типа <a href=./get.php?file=my_file.tar.gz&sessid=you_sess_id>Загрузить</a>
Идентификатор сессии даем что бы стартовать не новую сессию а использовать ту что запущена в download.php ну и передаем имя файла (можно и лучше передавать числовой идентификатор файла, а по нему из базы вытаскивать путь до него и имя). В get.php зная путь до файла считываем его через fread и выдаем после заголовков (в зависимости от миме типа) в поток через echo естественно все это через fseek как только достигаеться EOF (end of file) в сессию пишем что то типа $_SESSION['file'][$_GET['file']]=true;
Теперь о download.php если пугает цикл то можно повешать блоху 1x1 через <iframe src=./check_download.php?file=my_file.tar.gz&sessid=you_sess_id></iframe> в котором в безконечном цикле проверяем появилась ли в сессии переменная $_SESSION['file'][$_GET['file']] если да то через java script top.document.location.href=./thankyou.html в нем и пишите типа спасибо.
Опять же это один из способов можно и без блохи а в download.php через sleep(); flush(); в цикле проверять наличие переменной в сессии и как появиться можно и через header() и через java-script редиректом отправить куда надо...
В общем вот он алгоритм на ладони, осталось только в код переложить...
-~{}~ 11.10.06 11:06:
Автор оригинала: Vital_N
sleep, бесконечный цикл....
думаю не стОит
А что в этом такого? просто в цикле flush() давать и все будет пучком...