У меня есть страница download.php, которая будет вызываться каждый раз, когда пользователь нажимает кнопку «Загрузить» на моей странице. Файл составляет около 1 ГБ. Однако текущая страница была заблокирована до того, как файл был полностью загружен. Есть ли способ сделать это асинхронной задачей, чтобы пользователь мог по-прежнему использовать веб-сайт во время загрузки файла на свой компьютер.
Благодарю.
Если вы используете сеансы, то прежде чем начинать какой-либо длительный процесс, вы должны позвонить session_write_close () или вы получите блокировку по всему сайту. Из документов есть:
Данные сеанса обычно сохраняются после того, как ваш сценарий завершается без необходимости вызывать session_write_close (), но, поскольку данные сеанса блокируются для предотвращения одновременной записи, только один сценарий может работать с сеансом в любое время.
Итак, если у вас есть длительный скрипт, который называется session_start()
и не звонил session_write_close()
в результате любая страница, которой требуется доступ к сеансу, теперь должна дождаться окончания выполнения долго выполняемого сценария, прежде чем он сможет начаться. Таким образом, блокировка всего сайта.
Это может или не может решить вашу проблему, потому что я не уверен, что вы подразумеваете под «блокировкой» в вашем вопросе.
Сначала создайте ссылки для скачивания, как это: —
<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 и т. Д., И она не будет блокировать текущую страницу, все будет работать как раньше, но браузер покажет диалог сохранения файла для загрузки файла, я не тестировал этот код, поэтому может быть некоторый синтаксис ошибка, спасибо 🙂