Выполнение PhP Upload в PhP 5.4 не работает. Не заданы переменные сеанса

У меня есть проблема с PhP File Upload progress monitor в самом начале.

Во-первых, здесь приведены соответствующие настройки PhP.ini (директива, локальное значение и главное значение):

session.upload_progress.cleanup On On session.upload_progress.enabled On On session.upload_progress.freq 1% 1% session.upload_progress.min_freq 1 1 session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS session.upload_progress.prefix upload_progress_ upload_progress_ 

Вот форма (упрощенная):

  <form id="fileupload" style="position:relative;" target="iframe_fileupload" action="http://www.athiyoga.org/testupload.php" method="POST" enctype="multipart/form-data"> <input type="hidden" name="<?echo ini_get("session.upload_progress.name");?>" value="first"/> <input type="file" name="file_1"> <button type="submit" >Start Submit</button> </form> 

У меня есть JQuery Ajax-код, в том же файле PhP (конечно, как JS-скрипт), как в:

  $('#fileupload').submit(function(event){ //UPDATED THIS PART after reading: http://stackoverflow.com/questions/19336610/delay-in-populating-session-upload-progress-data //POSTING the magic variable PHP_SESSION_UPLOAD_PROGRESS during status inquiry too var params = {PHP_SESSION_UPLOAD_PROGRESS:"first", some_var:20 }; var data_params = jQuery.param( params ); setTimeout(function(){ upload_promise = $.ajax({ url: 'upload_status.php', data: data_params, dataType: 'html', type : 'POST', cache : false }); $.when(upload_promise).done(function(status_response){ $('#response_status').html(status_response); }); },5000); ... ... 

Файл upload_status.php просто перекликается с массивом $ _SESSION. Я также установил переменную тестового сеанса в form-php, чтобы убедиться, что AJAX (через upload_status.php) выбирает эту переменную сеанса. Оно делает. Но не знак (без переменной / индекса) статуса загрузки в массиве $ _SESSION! Файлы загружаются. Я убедился, что файлы достаточно большие, так что 5000 мс достаточно, чтобы сообщить о промежуточном статусе.

Я никогда не реализовывал индикатор загрузки файлов PhP, поэтому я задаюсь вопросом, не пропал ли я что-то. Как только я получаю один пункт статуса в загрузке, я смогу сделать все остальное.

благодаря

Могут быть некоторые проблемы, я перечислял несколько из них.

  • Буферизация запросов веб-сервера должна быть отключена для правильной работы, иначе PHP может видеть загрузку файла только после полной загрузки.
  • Эта функция не работает, когда ваш веб-сервер работает с PHP через FastCGI.
  • Не забывайте, что сеанс должен быть инициализирован до создания формы, иначе вы не получите никакой информации в сеансе.
  • Он не будет работать в PHP 5.3 или ранее.
  • Обратите внимание: если вы запустите этот код и распечатаете содержимое $ _SESSSION [$ key], вы получите пустой массив из-за того, что session.upload_progress.cleanup включен по умолчанию и он очищает информацию о ходе работы, как только все данные POST читать. Установите значение Off или 0, чтобы увидеть содержимое $ _SESSION [$ key].

Это может помочь вам отслеживать ваш индикатор выполнения http://pecl.php.net/package/uploadprogress

Надеюсь, это поможет вам решить проблему.