асинхронный — страница блокируется при загрузке больших файлов

У меня есть страница download.php, которая будет вызываться каждый раз, когда пользователь нажимает кнопку «Загрузить» на моей странице. Файл составляет около 1 ГБ. Однако текущая страница была заблокирована до того, как файл был полностью загружен. Есть ли способ сделать это асинхронной задачей, чтобы пользователь мог по-прежнему использовать веб-сайт во время загрузки файла на свой компьютер.

Благодарю.

0

Решение

Если вы используете сеансы, то прежде чем начинать какой-либо длительный процесс, вы должны позвонить session_write_close () или вы получите блокировку по всему сайту. Из документов есть:

Данные сеанса обычно сохраняются после того, как ваш сценарий завершается без необходимости вызывать session_write_close (), но, поскольку данные сеанса блокируются для предотвращения одновременной записи, только один сценарий может работать с сеансом в любое время.

Итак, если у вас есть длительный скрипт, который называется session_start() и не звонил session_write_close() в результате любая страница, которой требуется доступ к сеансу, теперь должна дождаться окончания выполнения долго выполняемого сценария, прежде чем он сможет начаться. Таким образом, блокировка всего сайта.

Это может или не может решить вашу проблему, потому что я не уверен, что вы подразумеваете под «блокировкой» в вашем вопросе.

0

Другие решения

Сначала создайте ссылки для скачивания, как это: —

<a class="download" href="/myfiles/video/file.pdf"> Dow

загрузить файл.pdf

затем в Jquery:

$(document).ready(function(){

$(document).on('.download', 'click', function(){

var href = $(this).href;
$('<iframe />', { src :  href }).appendTo('body');
return false; // prevent from default action, can be done with e.preventDefault() also

}) // __download

}); // __ document ready

Эту технику используют многие большие сайты, такие как Facebook, GitHub и т. Д., И она не будет блокировать текущую страницу, все будет работать как раньше, но браузер покажет диалог сохранения файла для загрузки файла, я не тестировал этот код, поэтому может быть некоторый синтаксис ошибка, спасибо 🙂

0

По вопросам рекламы [email protected]