Есть скрипт, который довольно долго работает, и есть необходимость отдавать в браузер ход выполнения скрипта. мне видится 2 варианта решения этой задачи: 1. по мере выполнения php скрипта ведем некий лог файлик, и яаксом из браузера дергаем этот файлик и читаем из него 2. тот же самое но с БД Что будет работать быстрее? Что практичнее? Что будет если один скрипт будет писать в БД а второй тут же читать? Скрипт большой и может написать огромный лог, как его читать с того места, на котором закончили в прошлый раз? Может есть какие-то готовые решения и я вообще не в ту сторону копаю? Спасибо!
лол, зачем же в бд и файлы?). Можно решить эту проблемку "гиф сокетом"). Отправляем браузеру контент тип имайдж/гиф и отправляем вместо картики инфу о состоянии выполнения скрипта. С браузера на js отправляем запрос пых файлу, а на сервере пых начинает отправку "картинки". Я бы запилил мало-мальский протокол. А еще можно отдать страницу целиком, а потом не разрывая соединения дальше отправлять инфу, а в браузере ее читать с помощью js(контент-ленгт не надо отправлять только). На счет логов--можно замутить двумя файлами, ну или файлом и кусочком инфы в бд. Суть такова, перед дописыванием инфы узнаем размер файла и пишем его в файл или бд, а потом дописываем инфу. Потом если надо прочитать последнюю запись тупо берем значение размера файла записанное ранее, открываем файл на чтение и начинаем читать с того самого места по конец файла.
ну это делается не так. надо создать 30 тысяч запусков по одной картинке затащат по очереди. Создать в БД задания, запускать, забирать себе одно задание (отмечать) потом если удалось - то помечать выполненным.
На каждый запуск создавать новый файл лога, какие проблемы то? =) Кто заставляет писать один большой лог? =)
igordata, ты где-нибудь видел чтобы логи сразу писались в БД? не последующий разбор, а сразу в процессе полезной работы. приведи пример.
не понял юмора. это что называть логами. Раздача заданий и из выполнение уже по факту лог. твой вопрос мне не ясен.
ты не знаешь что такое лог? топикстартер хочет видеть ход выполнения процесса: предполагает что можно вести лог и отображать свежую его часть. какие нафиг задания - это ты свои же идеи комментируешь. не очень хорошо когда представление диктует какую выбрать модель. текстовые логи это просто и универсально. 100500 инструментов для просмотра и анализа.
artoodetoo, да он в этой теме еще с первой своей мессаги слегка тролить начал%). На счет видел ли где-нибудь где логи пишутся в бд - в ISPConfig логи в бд пишутся)
не знаю что такое ISPConfig -- логи пишутся сразу в базу или закачиваются по необходимости для разбора?
ТС, можно сделать еще так: в твоем скрипте запилить так сказать дефолтовый вывод и вывод инфы, типо если обращаемся просто к скрипту то он отдает страницу, но не выполняет процесс с картинками, а если обратиться к нему типо ?start&withprocessinfo то он выдает массив с инфой в json периодически. Так вот. На странице которую он отдал просто так есть кнопочка, а на нажатие этой кнопочки есть обработчик на JS, которые отправляет XMLHttpRequest на этот-же скрипт тока добавляя ?start&withprocessinfo. Далее обработчик постоянно читает ответ, с его сохранением в отдельную переменную, если ответ != переменной с предидущим ответом значит нам пришла инфа, мы берем эту инфу и разбираем из json в массив js, ну и на страницу куда-нибудь кладем, в инфу мона запихать сколько времени скрипт уже работает, сколько картинок удачно скачал, сколько неудачно, ну итп. Думаю понятно идею подал. Вообще если захотеть то можно придумать оч много способов. Вот сча мне пришла идея---юзать memcached, рабочий скрипт ложит в мэмкэш инфу и постоянно ее обновляет, а другой скрипт вытаскивает ее, а если скрипт запущен на месяц, то можно реализовать и управление процессом, опять же через мэмкэш, да хоть паузу и прекращение скрипта с последующим запуском и продолжением итп итд. Если у тебя нет на хостинге мэмкэша--просканируй сканером портов какой-нить диапазон немецких айпишников на открытость 11211 порта, вот тебе и сервак с мэмкешем). Если нет либы на php твоего хостинга для работы с мэмкешем----там протокол простейший, можно за 40 минут написать свой класс полностью реализовав функционал либы под php. Ну или попробовать найти уже готовый, наверняка есть). Чет я отошел малость от вопроса, но идея с мэмкешем--самая норм, я бы даже в бд не ложит инфу, ибо это изврат, для таких задач мэмкэш или какой-нить редис самое то). ПРи желании можно запилить безостановочную работу скрипта целый год, при этом можно править сорцы не прерывая работу скрипта---просто запилить код обработчика в переменную и потом его тупо eval($code);, тоесть если у нас скрипт начал работать с косяками---просто заменяем во время работы код в переменной и все, скрипт у нас начинает работать нормально), но я хз надо ли ради этого реализовывать такую махину(если конечно ты не все картинки интернета собрался перекачивать ), опять же выденруть 1 запуском скрипта получится на 60% быстрее чем выдернуть множеством запусков, ибо или каждый раз будет создаваться дочерний процесс под твой скрипт(если php-fpm), или он создастся 1 раз. Епать я наркоман%) Добавлено спустя 47 секунд: artoodetoo, сразу в базу)
он сможет видеть ход выполнения процесса со 100% детальностью. не знаю, что вызывает у тебя страх. Задания в бд. Скрипты разбирают задания и рапортуют о выполнении. Всё идеально. Добавлено спустя 2 минуты 56 секунд: вы такие геморные пути предлагаете, вместо того, чтобы завести задания в бд =) генераторы кода
Это очень долго, хотя смотря как сделать и какой хостинг. Не, мож он просто парсит хтмл и выгружает картинки, я отсюда отталкивался%). Хотя опять-же можно пропарсить и в бд, а потом грузить, но блеа если одноразово то нах? а если этот скрипт юзаецца каждый день то тогда еще можно и в бд. Добавлено спустя 10 минут 22 секунды: Самый безгеморный вариант----тупо просто из пыха echo $infa периодически, тока надо ob_implicit_flush(); в начале скрипта и все. Если фронтенд не разорвет соединение с php то все будет нормально.
запустить в параллель столько скриптов, сколько позволяет забирать без забанивания тот сайт. соотв, скрипт будет парсить хтмл, и добавлять задания в базу для паучков, которые будут утаскивать картинки по-одной. Тут вообще большая удача, что запросы не отдаются с 10секундной паузой. В противном случае без сотни паучков не обойтись. согласен. обсуждение и реализация порой занимают больше времени чем накидать и пусть работает. =)