За последние 24 часа нас посетил 16721 программист и 1694 робота. Сейчас ищут 824 программиста ...

как вывести процесс выполнения скрипта php пользователю

Тема в разделе "JavaScript и AJAX", создана пользователем phpru888, 7 июн 2011.

  1. phpru888

    phpru888 Активный пользователь

    С нами с:
    7 июн 2011
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте!
    Имеется 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:
    1. foreach($products as $i => $product)
    2. {
    3.     //отправить заголовок с данными инерации json_encode(array("iter" => "$i", "total"=>"9999"))
    4. }
     
  2. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    подсчитай сколько всего действий выполняет цикл и сколько выполнил, погугли как правильно % высчитать, аяксом обращайся каждую секунду (не к циклу а к переменной в которой хранится информация) и получай данные о выполнении операции..
     
  3. phpru888

    phpru888 Активный пользователь

    С нами с:
    7 июн 2011
    Сообщения:
    3
    Симпатии:
    0
    сделал в цикле сохранение номера итерации в сессию,
    сделал вторую функцию, которая аяксом выводит значение этой переменной. Но вторая функция ждет пока выполнится первая (скрипт с циклом). Почему она не работает асинхронно?
     
  4. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    добавь результат к примеру в сессию и читай её.
     
  5. asik

    asik Активный пользователь

    С нами с:
    12 июл 2007
    Сообщения:
    211
    Симпатии:
    0
    делал это так
    1) аякс запрос на старт скрипта. На сервере этот запрос "форкается"(pcntl_fork - unixonly), основной отвечает клиенту, что скрипт успешно запущен и некий идентификатор лог-файла. А форк, начинает выполнять основную работу, записывая результаты в лог (к примеру с именем, которое было передано rkbtyne как идентификатор лог-файла)
    2) каждые 5 секунд, клиент инициализирует аякс запрос типа: дай мне лог, идЛога=XXX. А сервер смотрит этот лог, и возвращает клиенту промежуточные результаты об работе Форк-скрипта. По какому-либо признаку (например первый символ в файле = #27) скрипт определяет, что "форк"-процесс завершил работу успешно, и сообщает это клиенту, и удаляет файл-лог. Если-же (дата изменения файла - сейчас) > 15 минут, то удаляем файл-лог, и сообщаем клиенту, что форк-процесс потерпел крах!
     
  6. phpru888

    phpru888 Активный пользователь

    С нами с:
    7 июн 2011
    Сообщения:
    3
    Симпатии:
    0
    спасибо всем, сделал сохранение промежуточного результата не в сессию, а в файл в формате json. Скрипт запускается без форка, этого мне достаточно