Доброго дня!
Задача: отобразить прогресс бар загрузки файлов с возможностью загрузки нескольких файлов.
форма:
PHP:
скопировать код в буфер обмена
<form onsubmit="upload_start()" target="upload_iframe" action="../blocks/file_tools/upload.php" enctype="multipart/form-data" method="post"> <input type="hidden" id = "PHP_SESSION_UPLOAD_PROGRESS" name= " <?PHP echo ini_get("session.upload_progress.name"); ?>" value = " <?PHP echo rand(); ?>" /> <input id="upload_files" name="upload_files[]" type="file" multiple accept="image/*" /> <br/> <br/> <button class="button button_green" type="submit" title="Загрузить выбранный файлы">Загрузить</button> <br/> <br/> </form>
upload.php:
PHP:
скопировать код в буфер обмена
require_once('uploader.php'); $fu = new FileUploader(); $maxupload = $fu->getMaxUpload(); $file_array = $fu->reArrayFiles($_FILES['upload_files']); foreach ($file_array as $file) { // echo 'File Name: ' . $file['name'].'<br>'; // echo 'Temp Name: ' . $file['tmp_name'].'<br>'; // echo 'File Type: ' . $file['type'].'<br>'; // echo 'File Size: ' . $file['size'].'<br><hr/>'; $fu->upload($file, '/files/'); }
в методе upload обычная функция copy
каждые 2 секунды через AJAX вызываю скрипт:
Настройки php:
session.upload_progress.name: PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.enabled: 1
session.upload_progress.cleanup: 0
session.upload_progress.prefix: upload_progress_
session.upload_progress.freq: 1%
session.upload_progress.min_freq: 1
Проблема следующая: $_SESSION[$progress_key] возвращает NULL до тех пор, пока файл(ы) полностью не загрузится на сервер, затем возвращает массив вида:
Цитата:status
start_time 1379327737
content_length 3582360
bytes_processed 3582360
done true
files [0]
field_name "upload_files[]"
name "55bbd8ad918c.jpg"
tmp_name "/home/users/s/soulrst/tmp/phptzRNU0"
error 0
done true
start_time 1379327737
bytes_processed 1666504
[1]
field_name "upload_files[]"
name "1461cee5a9b7.jpg"
tmp_name "/home/users/s/soulrst/tmp/phpGL6qbH"
error 0
done true
start_time 1379327737
bytes_processed 1096631
[2]
field_name "upload_files[]"
name "5836c0b0bd12.jpg"
tmp_name "/home/users/s/soulrst/tmp/phpVAaetn"
error 0
done true
start_time 1379327737
bytes_processed 818574
т.е. нет промежуточных значений, где bytes_processed < content_length, а done !== true
Причём не зависимо от размера файлов!
Получается полоса загрузки 0 или 100%
В чём может быть причина?
|