Здравствуйте! Имеется php скрипт, который в цикле делает определенные действия и может выполняться несколько минут. Нужно чтоб пользователь динамически видел на какой итерации находится цикл. Т.е. обычное окно с надписью "выполнено 5 из 100". Скрипт вызывается след. функцией [js]function update() { jQuery.ajax({ type:'POST', async: false, dataType:'json', url: '/admin/update', data: ({ }), success:function(data, textStatus) { //вывести результат пользователю } }); }[/js] можно ли в цикле php отправлять заголовки браузеру(яваскрипту), который в свою очередь динамически выводил бы номер итерации ? PHP: foreach($products as $i => $product) { //отправить заголовок с данными инерации json_encode(array("iter" => "$i", "total"=>"9999")) }
подсчитай сколько всего действий выполняет цикл и сколько выполнил, погугли как правильно % высчитать, аяксом обращайся каждую секунду (не к циклу а к переменной в которой хранится информация) и получай данные о выполнении операции..
сделал в цикле сохранение номера итерации в сессию, сделал вторую функцию, которая аяксом выводит значение этой переменной. Но вторая функция ждет пока выполнится первая (скрипт с циклом). Почему она не работает асинхронно?
делал это так 1) аякс запрос на старт скрипта. На сервере этот запрос "форкается"(pcntl_fork - unixonly), основной отвечает клиенту, что скрипт успешно запущен и некий идентификатор лог-файла. А форк, начинает выполнять основную работу, записывая результаты в лог (к примеру с именем, которое было передано rkbtyne как идентификатор лог-файла) 2) каждые 5 секунд, клиент инициализирует аякс запрос типа: дай мне лог, идЛога=XXX. А сервер смотрит этот лог, и возвращает клиенту промежуточные результаты об работе Форк-скрипта. По какому-либо признаку (например первый символ в файле = #27) скрипт определяет, что "форк"-процесс завершил работу успешно, и сообщает это клиенту, и удаляет файл-лог. Если-же (дата изменения файла - сейчас) > 15 минут, то удаляем файл-лог, и сообщаем клиенту, что форк-процесс потерпел крах!
спасибо всем, сделал сохранение промежуточного результата не в сессию, а в файл в формате json. Скрипт запускается без форка, этого мне достаточно