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

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 принятие файла вообще работает
 

white phoenix

Новичок
а что ты хотел? ведь сначала должны быть заголовки, а потом уже содержание. как ты собираешься после файла отдавать location?
 

kSalex

Новичок
и через js попробовал - тоже не выходит, разве если тайминг ставить. И как быть? в лог надо обязательно писать
 

white phoenix

Новичок
как быть это уже другой вопрос, для начала тебе надо понять почему вышеприведенный код не будет работать. надеюсь ты это понял, теперь отвечу на вопрос как быть. на страничке с закачкой можно сделать <iframe src="http://path/to/file/for/download"> и присвоить нужное действие на событие onload этого frame, оно выполняется как только страница загружена полностью (закачка завершена).
 

kSalex

Новичок
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-ф-ии не срабатывают. Где моя ошибка ?
 

white phoenix

Новичок
kSalex
похоже ты не понял.
download.html:
<html>
<body>
<iframe width="1" height="1" src="download.php" onLoad="window.location='index.php'"></iframe>
</body>
</html>
download.php:
//... ^^

т.е. во фрейме должен грузиться файл для скачивания.
 

kSalex

Новичок
блин, а я то смотрю что-то здесь не так, вижу что мой файл грузится и на этом всё заканчивается
 

kSalex

Новичок
Зделал как ты написал, загрузка файла происходит, а редирект нет. Тестил под Opera и IE
 

SiMM

Новичок
> загрузка файла происходит, а редирект нет
Выбери что-то одно (или загрузку файла, или редирект, а не два в одном).
 

kSalex

Новичок
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>
 
Сверху