Я пытаюсь создать индикатор выполнения загрузки с PHP. Я увидел новую функцию PHP 5.4: загрузить сессию прогресса .
Это мой HTML-код:
<form id="upload" action="ajax/progress.php" method="POST" enctype="multipart/form-data"> <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="dupload" /> <input id="file1" type="file" name="file1" /> <input class="btn primary" type="submit" value="Upload" /> </form>
И это progress.php:
<?php session_start(); $key = ini_get("session.upload_progress.prefix") . 'dupload'; if (!empty($_SESSION[$key])){ $current = $_SESSION[$key]["bytes_processed"]; $total = $_SESSION[$key]["content_length"]; echo $current < $total ? ceil($current / $total * 100) : 100; } else { var_dump($_SESSION); var_dump($_FILES); }
AJAX:
$('#upload').submit(function () { interval_id = setInterval(function () { $.ajax({ url: "ajax/progress.php6", type: "POST", success: function (data) { console.log(data); } }); }, 200); return false; });
Все настройки ini правильные. (сеанс включен, имя и префикс верны)
Я всегда получаю пустой массив сеансов. Что не так?
Благодаря!
Не удалось разобраться, поэтому я использовал XMLHTTPREQUEST «прогресс», и это сработало хорошо. Благодаря!
Это невозможно в одном запросе POST, вы можете выполнять запросы AJAX и читать сеанс во время загрузки файла. После загрузки файла ключ session.upload_progress.name
удаляется, поэтому вы получаете пустой массив.
Я думаю, это потому, что ваша форма не отправляется, так как вы возвращаете false в
$('#upload').submit(function () { interval_id = setInterval(function () { $.ajax({ url: "ajax/progress.php6", type: "POST", success: function (data) { console.log(data); } }); }, 200); return false; });
и он инициализирует интервал, поэтому страница всегда возвращает значение null, поскольку ничего не загружается. Попробуйте использовать http://www.malsup.com/jquery/form , он представляет форму