Загрузка файла

  • Автор темы Автор темы kSalex
  • Дата начала Дата начала

kSalex

Новичок
Загрузка файла

Такая задача:
Пользователь принимает фаил, после чего необходимо в сессию записать сообщение об этом и сделать редирект на эту же страницу.
После чего запись из сессии(например: Success download) переводится на язык сайта по умолчанию и записывается в лог.
Запись из сессии переводится на текущий язык и выдаётся пользователю. Собственно немного кода:
PHP:
$ctype="application/text-plain";      	
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");   
header("Content-Type: $ctype");  
$header="Content-Disposition: attachment; filename=".$save_filename.";";  
header($header ); 
header("Content-Transfer-Encoding: binary");  
header("Content-Length: ".$len); 
@readfile($path.$save_filename);

$_SESSION['msg'] = $msg;
header('Location: mypage.php');
exit();

Проблема в том что не дожидаясь принятия файла скрипт редиректит юзера. Другими словами: можно ли как-то определить принял юзер файл(и тогда редиректить) или нет.

//ps принятие файла вообще работает
 
а что ты хотел? ведь сначала должны быть заголовки, а потом уже содержание. как ты собираешься после файла отдавать location?
 
и через js попробовал - тоже не выходит, разве если тайминг ставить. И как быть? в лог надо обязательно писать
 
как быть это уже другой вопрос, для начала тебе надо понять почему вышеприведенный код не будет работать. надеюсь ты это понял, теперь отвечу на вопрос как быть. на страничке с закачкой можно сделать <iframe src="http://path/to/file/for/download"> и присвоить нужное действие на событие onload этого frame, оно выполняется как только страница загружена полностью (закачка завершена).
 
white phoenix - почему он не работает я понял.
За подсказку спасибо, сейчас попробую

-~{}~ 11.12.05 11:16:

PHP:
<?php
    if(isset($_GET['f']) && !empty($_GET['f'])){
        $path = $_SERVER['DOCUMENT_ROOT'].'/report/';
        $savefile = preg_replace("/\D/", '', $_GET['f']);
        if (is_file($path.substr($savefile, 0, 2).'-'.substr($savefile, 2, 4).'.log')) {
            //download
            $save_filename = substr($savefile, 0, 2).'-'.substr($savefile, 2, 4).'.log';
            $len = filesize($path.$save_filename);
            $save_filename = basename($path.$save_filename);
            $file_extension = strtolower(substr(strrchr($save_filename,"."),1));
            $ctype="application/text-plain";
            //Begin writing headers
            header("Pragma: public");
            header("Expires: 0");
            header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
            header("Cache-Control: public");
            header("Content-Description: File Transfer");

            header("Content-Type: $ctype");
            //Force the download
            $header="Content-Disposition: attachment; filename=".$save_filename.";";
            header($header );
            header("Content-Transfer-Encoding: binary");
            header("Content-Length: ".$len);
            readfile($path.$save_filename);
        }
   }

?>
<html>
<body>
<iframe width="1" height="1" src="http://report/12-2005.log" onLoad="javascript:setcookie('Download successfully');window.location='index.php'"></iframe>
</body>
</html>

При запросе на загрузку делаю редирект на эту страницу.
Вроде бы так должно быть, но у меня не получилось, js-ф-ии не срабатывают. Где моя ошибка ?
 
kSalex
похоже ты не понял.
download.html:
<html>
<body>
<iframe width="1" height="1" src="download.php" onLoad="window.location='index.php'"></iframe>
</body>
</html>
download.php:
//... ^^

т.е. во фрейме должен грузиться файл для скачивания.
 
блин, а я то смотрю что-то здесь не так, вижу что мой файл грузится и на этом всё заканчивается
 
Зделал как ты написал, загрузка файла происходит, а редирект нет. Тестил под Opera и IE
 
> загрузка файла происходит, а редирект нет
Выбери что-то одно (или загрузку файла, или редирект, а не два в одном).
 
download.php
PHP:
$path = $_SERVER['DOCUMENT_ROOT'].'/report/';
$savefile = 122005;
if (is_file($path.substr($savefile, 0, 2).'-'.substr($savefile, 2, 4).'.log')) {
    //download
    $save_filename = substr($savefile, 0, 2).'-'.substr($savefile, 2, 4).'.log';
    $len = filesize($path.$save_filename);
    $save_filename = basename($path.$save_filename);
    $file_extension = strtolower(substr(strrchr($save_filename,"."),1));
    $ctype="application/text-plain";
    //Begin writing headers
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-Type: $ctype");
    //Force the download
    $header="Content-Disposition: attachment; filename=".$save_filename.";";
    header($header );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$len);
    readfile($path.$save_filename);
}

download.html
<html>
<body>
<iframe width="1" height="1" src="download.php" onLoad="window.location='index.php'"></iframe>
</body>
</html>
 
Сверху