Как отследить прогресс загрузки файла на php?

Пользователь

от ella , в категории: PHP , 6 месяцев назад

Как отследить прогресс загрузки файла на php?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от jeremy_larkin , 6 месяцев назад

@ella 

Для отслеживания прогресса загрузки файла на PHP можно использовать следующий подход:

  1. Включите возможность отслеживания прогресса загрузки в настройках PHP. Это можно сделать в файле php.ini или в коде PHP с помощью функции ini_set(). Установите значения следующих директив:
1
2
3
4
ini_set('session.upload_progress.enabled', '1');
ini_set('session.upload_progress.cleanup', '1');
ini_set('session.upload_progress.prefix', 'progress_');
ini_set('session.upload_progress.name', 'upload_progress');


  1. Создайте HTML-форму для загрузки файла, в которой добавьте input элемент с типом "file". Добавьте атрибут enctype="multipart/form-data" к форме, чтобы разрешить загрузку файлов.
1
2
3
4
<form action="upload.php" method="POST" enctype="multipart/form-data">
  <input type="file" name="file">
  <input type="submit" value="Upload">
</form>


  1. В файле PHP, указанном в атрибуте action формы, добавьте код для отслеживания прогресса загрузки файла. Вы можете использовать функцию session_id() для получения идентификатора текущей сессии, а затем проверить значение ключа, соответствующего отслеживанию прогресса загрузки.
1
2
3
4
5
$progress_key = ini_get('session.upload_progress.prefix') . $_SESSION['upload_progress']['key'];
if (isset($_SESSION['upload_progress']) && isset($_SESSION['upload_progress']['total']) && isset($_SESSION['upload_progress']['bytes_processed'])) {
  $progress = $_SESSION['upload_progress']['bytes_processed'] / $_SESSION['upload_progress']['total'] * 100;
  echo "Прогресс загрузки: " . $progress . "%";
}


  1. После завершения загрузки файла обязательно удалите данные о прогрессе загрузки из сессии.
1
unset($_SESSION['upload_progress']);


Обратите внимание, что этот подход предполагает использование сеансов PHP. Вам также может потребоваться настроить сервер, чтобы он поддерживал сеансы.