Intereting Posts
Печать встроенной строки PHP вместо стирания всей страницы Сортировка и фильтрация данных в GridView Yii2, где столбец отсутствует в базе данных Загрузить DOC или PDF с помощью PHP Symfony 2 Security: продолжает перезагружать данные у поставщика услуг? Laravel 4 от контактной формы до электронной почты администратора Paypal Скрытые переменные не работают завивать и изменять размер удаленного изображения Какой самый простой способ в PHP создать ассоциативный массив из двух параллельных индексированных массивов? $ stmt-> execute (): как узнать, была ли вставка db успешной? Можно ли получить данные буфера обмена от пользователя с PHP или JavaScript? htaccess перенаправляет любые URL-адреса, заканчивающиеся на .php для индексации Проверка правильности JavaScript и PHP Резервное копирование базы данных MySql с помощью PHP Что такое правильный синтаксис для вызова функции рекурсивно в php неправильный заголовок из сценария. Плохой заголовок = 1: index.php

Работает ли процесс загрузки сеанса с nginx и php-fpm?

Я запускаю nginx 1.2.3 / php-fpm 5.4.6 и пытаюсь использовать функцию выполнения загрузки сеанса . Во время загрузки $_SESSION никогда не содержится никаких данных о загрузке. Сначала я принимал ошибки кодирования, но даже самые простые / базовые тесты прогресса загрузки не смогли ничего сделать в $_SESSION . Теперь я подозреваю, что файл отправляется непосредственно в nginx, который полностью обрабатывает загрузку от начала до конца, THEN nginx передает загрузку на php-fpm так быстро, что нет реального «прогресса» для отчета. Правильно ли я в этой оценке? Если да, то как я могу обойти это?

phpconfig подтверждает, что настройки session.upload установлены правильно.

Ниже приведен текущий тестовый код, заимствованный из этого блога .

 <?php /* File upload progress in PHP 5.4 */ /* needs a 5.4+ version */ $version = explode( '.', phpversion() ); if ( ($version[0] * 10000 + $version[1] * 100 + $version[2]) < 50400 ) die( 'PHP 5.4.0 or higher is required' ); if ( !intval(ini_get('session.upload_progress.enabled')) ) die( 'session.upload_progress.enabled is not enabled' ); session_start(); if ( isset( $_GET['progress'] ) ) { $progress_key = strtolower(ini_get("session.upload_progress.prefix").'demo'); if ( !isset( $_SESSION[$progress_key] ) ) exit( "uploading..." ); $upload_progress = $_SESSION[$progress_key]; /* get percentage */ $progress = round( ($upload_progress['bytes_processed'] / $upload_progress['content_length']) * 100, 2 ); exit( "Upload progress: $progress%" ); } ?> <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script> <?php if ( isset($_GET['iframe']) ): /* thank you Webkit... */ ?> <form action="" method="POST" enctype="multipart/form-data"> <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="demo"> <input type="file" name="uploaded_file"> <input type="submit" value="Upload"> </form> <script type="text/javascript"> window.location.hash = ""; /* reset */ jQuery("form").bind("submit", function() { window.location.hash = "uploading"; }); </script> <?php else: ?> <iframe src="?iframe" id="upload_form"></iframe> <script type="text/javascript"> jQuery(document).ready(init); function init() { /* start listening on submit */ update_file_upload_progress(); } function update_file_upload_progress() { if ( window.frames.upload_form.location.hash != "#uploading" ) { setTimeout( update_file_upload_progress, 100 ); /* has upload started yet? */ return; } $.get( /* lather */ "?progress", function(data) { /* rinse */ jQuery("#file_upload_progress").html(data); /* repeat */ setTimeout( update_file_upload_progress, 500 ); } ).error(function(jqXHR, error) { alert(error); }); } </script> <div id="file_upload_progress"></div> <?php endif; ?> 

Заметка на странице документации на php.net гласит:

s.zarges 19-Jun-2012 09:32
Обратите внимание: эта функция не работает, когда ваш веб-сервер запускает PHP через FastCGI. В массиве сеансов не будет информации о ходе.

К сожалению, PHP получает данные только после завершения загрузки и не может показать какого-либо прогресса.