Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Процесс загрузки файлов php >5.4
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Процесс загрузки файлов php >5.4

Страниц (1): [1]
 

1. soulreg - 16 Сентября, 2013 - 13:46:55 - перейти к сообщению
Доброго дня!
Задача: отобразить прогресс бар загрузки файлов с возможностью загрузки нескольких файлов.
форма:
PHP:
скопировать код в буфер обмена
  1. <form onsubmit="upload_start()" target="upload_iframe" action="../blocks/file_tools/upload.php"  enctype="multipart/form-data" method="post">
  2.     <input type="hidden"        id      = "PHP_SESSION_UPLOAD_PROGRESS" name= "<?PHP echo ini_get("session.upload_progress.name"); ?>" value    = "<?PHP echo rand(); ?>" />
  3.     <input id="upload_files" name="upload_files[]" type="file" multiple accept="image/*" />
  4.     <br/>
  5.     <br/>
  6.     <button class="button button_green" type="submit" title="Загрузить выбранный файлы">Загрузить</button>
  7.     <br/>
  8.     <br/>    
  9. </form>


upload.php:
PHP:
скопировать код в буфер обмена
  1.     require_once('uploader.php');
  2.         $fu = new FileUploader();  
  3.     $maxupload = $fu->getMaxUpload();
  4.     $file_array = $fu->reArrayFiles($_FILES['upload_files']);
  5.     foreach ($file_array as $file) {
  6. //        echo 'File Name: ' . $file['name'].'<br>';
  7. //        echo 'Temp Name: ' . $file['tmp_name'].'<br>';               
  8. //        echo 'File Type: ' . $file['type'].'<br>';
  9. //        echo 'File Size: ' . $file['size'].'<br><hr/>';    
  10.                 $fu->upload($file, '/files/');
  11.         }


в методе upload обычная функция copy
каждые 2 секунды через AJAX вызываю скрипт:
PHP:
скопировать код в буфер обмена
  1.         session_start();
  2. $progress_key = strtolower(ini_get("session.upload_progress.prefix").$_POST['id']);
  3. if(isset($_SESSION[$progress_key]) and is_array($_SESSION[$progress_key])) {
  4.         $status = $_SESSION[$progress_key];
  5. }
  6. header('Content-type: application/json');
  7. die(json_encode(array('status'=>$status)));


Настройки 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%
В чём может быть причина?

 

Powered by ExBB FM 1.0 RC1