Реалізація панелі перебігу завантаження проста і не вимагає додаткових розширень PHP, JavaScript або Flash. Але вам потрібен PHP 5.4 і новіший .
Ви повинні включити збір інформації про хід завантаження, встановивши директиву , session.upload_progress.enabled
щоб On
в php.ini
.
Потім додайте прихований ввід у форму завантаження HTML безпосередньо перед будь-якими іншими введеннями файлів. Атрибут HTML name
цього прихованого вводу повинен бути таким самим, як і значення директиви session.upload_progress.name
з php.ini
(зрештою перед цим session.upload_progress.prefix
). value
Атрибут до вас, він буде використовуватися як частина ключа сеансу.
Форма HTML може виглядати так:
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="<?php echo ini_get('session.upload_progress.prefix').ini_get('session.upload_progress.name'); ?>" value="myupload" />
<input type="file" name="file1" />
<input type="submit" />
</form>
Коли ви надсилаєте цю форму, PHP повинен створити новий ключ у $_SESSION
суперглобальній структурі, який буде заповнений інформацією про статус завантаження. Ключ об'єднаний name
та value
прихованого введення.
У PHP ви можете поглянути на заповнену інформацію про завантаження:
var_dump($_SESSION[
ini_get('session.upload_progress.prefix')
.ini_get('session.upload_progress.name')
.'_myupload'
]);
Вихідні дані будуть виглядати приблизно так:
$_SESSION["upload_progress_myupload"] = array(
"start_time" => 1234567890,
"content_length" => 57343257,
"bytes_processed" => 54321,
"done" => false,
"files" => array(
0 => array(
"field_name" => "file1",
"name" => "filename.ext",
"tmp_name" => "/tmp/phpxxxxxx",
"error" => 0,
"done" => false,
"start_time" => 1234567890,
"bytes_processed" => 54321,
)
)
);
Існує вся інформація, необхідна для створення індикатора прогресу - ви маєте інформацію, якщо завантаження все ще триває, інформацію про те, скільки байт буде передано в цілому і скільки байтів вже передано.
Щоб представити користувачеві хід завантаження, напишіть інший PHP-скрипт, крім завантажувального, який буде лише переглядати інформацію про завантаження в сеансі та повертати її у форматі JSON, наприклад. Цей скрипт можна викликати періодично, наприклад, кожну секунду, використовуючи AJAX та інформацію, представлену користувачеві.
Ви навіть можете скасувати завантаження, встановивши $_SESSION[$key]['cancel_upload']
на true
.
Для отримання детальної інформації, додаткових налаштувань та коментарів користувача див. Посібник PHP .