PHP скачать метод зависания страницы ... лучшие практики для загрузки? - PullRequest
1 голос
/ 29 сентября 2010

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

Моя проблема в том, что когда начинается загрузка, страница блокируется, и пользователь не может никуда перемещаться или что-либо делать на странице, пока файл не будет загружен (то есть: нажав на ссылку «перейти домой» ниже).Есть ли лучшие решения, чем я здесь придумаю?Я знаю, что, возможно, я упускаю что-то действительно простое ... это мой первый трек при настройке приватной страницы загрузки.

<script type="text/javascript">
function redirect_function(loc){
    window.location = loc;
}
</script>

<?php
// after form is submitted
$condition_met=check($_POST['email']);

if($condition_met) { ?>
    <p>Your file will begin downloading in 5 seconds.</p> <a>go home</a>
    <script type="text/javascript">
        setTimeout('redirect_function("download.php")', 5000);
    </script>
<?php } ?>

Страница с названием (download.php) выглядит следующим образомон зависает на странице ...

<?php
ob_start();
if($some_condition) { // check for authorization, etc
    $file='location/file.ext';
    header('Content-type: application/force-download');
    header('Content-disposition: attachment; filename="'. basename($file) .'"');
    header('Content-length: '. filesize($file) );
    readfile( $file );
} else {
    echo "error message";
}
ob_end_flush();
?>

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

Убрать выходной буфер. Readfile () будет постепенно извлекать данные по мере их поступления, но ваш выходной буфер перехватывает их все до тех пор, пока не доберется до сброса.

0 голосов
/ 29 сентября 2010

почти там, вам нужно изменить тип контента на

application/force-download
...