За последние 24 часа нас посетил 21841 программист и 1874 робота. Сейчас ищут 748 программистов ...

Вывод в браузер процесс выполнения скрипта php

Тема в разделе "Прочие вопросы по PHP", создана пользователем Dmitriy A. Arteshuk, 10 янв 2013.

  1. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Есть скрипт, который довольно долго работает, и есть необходимость отдавать в браузер ход выполнения скрипта.

    мне видится 2 варианта решения этой задачи:

    1. по мере выполнения php скрипта ведем некий лог файлик, и яаксом из браузера дергаем этот файлик и читаем из него

    2. тот же самое но с БД

    Что будет работать быстрее? Что практичнее? Что будет если один скрипт будет писать в БД а второй тут же читать?

    Скрипт большой и может написать огромный лог, как его читать с того места, на котором закончили в прошлый раз?

    Может есть какие-то готовые решения и я вообще не в ту сторону копаю?

    Спасибо!
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.120
    Симпатии:
    1.245
    Адрес:
    там-сям
    логи обычно пишутся в файл.
    про чтение конца лога гугли "php tail". есть инструменты
     
  3. r3l0c

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

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    лол, зачем же в бд и файлы?). Можно решить эту проблемку "гиф сокетом"). Отправляем браузеру контент тип имайдж/гиф и отправляем вместо картики инфу о состоянии выполнения скрипта. С браузера на js отправляем запрос пых файлу, а на сервере пых начинает отправку "картинки". Я бы запилил мало-мальский протокол. А еще можно отдать страницу целиком, а потом не разрывая соединения дальше отправлять инфу, а в браузере ее читать с помощью js(контент-ленгт не надо отправлять только).

    На счет логов--можно замутить двумя файлами, ну или файлом и кусочком инфы в бд. Суть такова, перед дописыванием инфы узнаем размер файла и пишем его в файл или бд, а потом дописываем инфу. Потом если надо прочитать последнюю запись тупо берем значение размера файла записанное ранее, открываем файл на чтение и начинаем читать с того самого места по конец файла.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а почему есть такой скрипт? что он делает?почему долго?
     
  5. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    по 30 тысяч картинок тащит с другого сервера
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну это делается не так. надо создать 30 тысяч запусков по одной картинке затащат по очереди. Создать в БД задания, запускать, забирать себе одно задание (отмечать) потом если удалось - то помечать выполненным.
     
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    На каждый запуск создавать новый файл лога, какие проблемы то? =) Кто заставляет писать один большой лог? =)
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    уж лучше бд
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.120
    Симпатии:
    1.245
    Адрес:
    там-сям
    igordata, ты где-нибудь видел чтобы логи сразу писались в БД? не последующий разбор, а сразу в процессе полезной работы.
    приведи пример.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не понял юмора. это что называть логами. Раздача заданий и из выполнение уже по факту лог. твой вопрос мне не ясен.
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.120
    Симпатии:
    1.245
    Адрес:
    там-сям
    ты не знаешь что такое лог? топикстартер хочет видеть ход выполнения процесса: предполагает что можно вести лог и отображать свежую его часть.

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

    текстовые логи это просто и универсально. 100500 инструментов для просмотра и анализа.
     
  12. r3l0c

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

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    artoodetoo, да он в этой теме еще с первой своей мессаги слегка тролить начал%).

    На счет видел ли где-нибудь где логи пишутся в бд - в ISPConfig логи в бд пишутся)
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.120
    Симпатии:
    1.245
    Адрес:
    там-сям
    не знаю что такое ISPConfig -- логи пишутся сразу в базу или закачиваются по необходимости для разбора?
     
  14. r3l0c

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

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    ТС, можно сделать еще так: в твоем скрипте запилить так сказать дефолтовый вывод и вывод инфы, типо если обращаемся просто к скрипту то он отдает страницу, но не выполняет процесс с картинками, а если обратиться к нему типо ?start&withprocessinfo то он выдает массив с инфой в json периодически. Так вот. На странице которую он отдал просто так есть кнопочка, а на нажатие этой кнопочки есть обработчик на JS, которые отправляет XMLHttpRequest на этот-же скрипт тока добавляя ?start&withprocessinfo. Далее обработчик постоянно читает ответ, с его сохранением в отдельную переменную, если ответ != переменной с предидущим ответом значит нам пришла инфа, мы берем эту инфу и разбираем из json в массив js, ну и на страницу куда-нибудь кладем, в инфу мона запихать сколько времени скрипт уже работает, сколько картинок удачно скачал, сколько неудачно, ну итп. Думаю понятно идею подал. Вообще если захотеть то можно придумать оч много способов. Вот сча мне пришла идея---юзать memcached, рабочий скрипт ложит в мэмкэш инфу и постоянно ее обновляет, а другой скрипт вытаскивает ее, а если скрипт запущен на месяц, то можно реализовать и управление процессом, опять же через мэмкэш, да хоть паузу и прекращение скрипта с последующим запуском и продолжением итп итд. Если у тебя нет на хостинге мэмкэша--просканируй сканером портов какой-нить диапазон немецких айпишников на открытость 11211 порта, вот тебе и сервак с мэмкешем). Если нет либы на php твоего хостинга для работы с мэмкешем----там протокол простейший, можно за 40 минут написать свой класс полностью реализовав функционал либы под php. Ну или попробовать найти уже готовый, наверняка есть). Чет я отошел малость от вопроса, но идея с мэмкешем--самая норм, я бы даже в бд не ложит инфу, ибо это изврат, для таких задач мэмкэш или какой-нить редис самое то). ПРи желании можно запилить безостановочную работу скрипта целый год, при этом можно править сорцы не прерывая работу скрипта---просто запилить код обработчика в переменную и потом его тупо eval($code);, тоесть если у нас скрипт начал работать с косяками---просто заменяем во время работы код в переменной и все, скрипт у нас начинает работать нормально), но я хз надо ли ради этого реализовывать такую махину(если конечно ты не все картинки интернета собрался перекачивать :D), опять же выденруть 1 запуском скрипта получится на 60% быстрее чем выдернуть множеством запусков, ибо или каждый раз будет создаваться дочерний процесс под твой скрипт(если php-fpm), или он создастся 1 раз.

    Епать я наркоман%)

    Добавлено спустя 47 секунд:
    artoodetoo, сразу в базу)
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    он сможет видеть ход выполнения процесса со 100% детальностью. не знаю, что вызывает у тебя страх.
    Задания в бд. Скрипты разбирают задания и рапортуют о выполнении. Всё идеально.

    Добавлено спустя 2 минуты 56 секунд:
    вы такие геморные пути предлагаете, вместо того, чтобы завести задания в бд =)
    генераторы кода
     
  16. r3l0c

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

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    Это очень долго, хотя смотря как сделать и какой хостинг. Не, мож он просто парсит хтмл и выгружает картинки, я отсюда отталкивался%). Хотя опять-же можно пропарсить и в бд, а потом грузить, но блеа если одноразово то нах? а если этот скрипт юзаецца каждый день то тогда еще можно и в бд.

    Добавлено спустя 10 минут 22 секунды:
    Самый безгеморный вариант----тупо просто из пыха echo $infa периодически, тока надо ob_implicit_flush(); в начале скрипта и все. Если фронтенд не разорвет соединение с php то все будет нормально.
     
  17. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.120
    Симпатии:
    1.245
    Адрес:
    там-сям
    будьте проще :)
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    запустить в параллель столько скриптов, сколько позволяет забирать без забанивания тот сайт.

    соотв, скрипт будет парсить хтмл, и добавлять задания в базу для паучков, которые будут утаскивать картинки по-одной.

    Тут вообще большая удача, что запросы не отдаются с 10секундной паузой. В противном случае без сотни паучков не обойтись.

    согласен. обсуждение и реализация порой занимают больше времени чем накидать и пусть работает. =)