1 / 1 / 0
Регистрация: 23.05.2014
Сообщений: 15
|
||||||
1 | ||||||
Отображение данных на сайте по мере выполнения php-скрипта23.05.2014, 20:30. Показов 7286. Ответов 9
Метки нет (Все метки)
Добрый вечер! Интересует такой вопрос. Есть примитивный php-скрипт, который в цикле анализирует базу адресов подписчиков из txt-файла и делает рассылку на каждый адрес по отдельности. Почему не всем сразу? - из собственных соображений. В добавок, для каждого (не)отправленного сообщения он выводит результат и время отправки. Ну, для статистики. На практике, конечно, получается что всё это добро выводится на экран только после прогрузки скрипта и, соответственно, отправки ВСЕХ сообщений, что довольно неудобно. Хотелось бы видеть на странице рез-ты работы сразу после отправки каждого письма. Вот и вопрос, как можно это дело забубенить? Ajax'ом с помощью jQuery? Как тогда это сделать грамотнее? Буду благодарен за любую помощь.
Скрипт самой рассылки выглядит примерно так:
0
|
23.05.2014, 20:30 | |
Ответы с готовыми решениями:
9
Загрузка контента по мере выполнения скрипта Поэтапный вывод по мере выполнения скрипта Динамический вывод работы перл-скрипта по мере его выполнения Как получить данные из скрипта по мере выполнения |
65 / 64 / 33
Регистрация: 25.02.2014
Сообщений: 229
|
|
23.05.2014, 21:05 | 2 |
разместите на странице фрейм, в котором будет выполняться скрипт и выводить результаты (не используйте буферизацию).
0
|
1 / 1 / 0
Регистрация: 23.05.2014
Сообщений: 15
|
||||||
23.05.2014, 21:31 [ТС] | 3 | |||||
А поподробнее можно? Насколько я понимаю, при текущем методе реализации даже с фреймом данные будут выводиться на экран только после выполнения сервером всего скрипта.
Добавлено через 20 минут Немного уточню суть: эта страница не содержит никаких данных, кроме результатов текущей рассылки, поэтому никакие другие элементы сайта отображать во время процесса не нужно. Я просто хочу, чтобы этот результат
С моей текущей реализацией данные выводятся за 1 раз, когда скрипт выполнен и его результат передан сервером на клиентскую часть. А это, на минуту, 1-2 сек. на отправку каждого письма. Т.е. с базой адресов этак 500, браузер ожидает выполнения скрипта 8-16 минут и все это время я не знаю отправлены ли сообщения или произошел какой-нибудь сбой. Добавление информации на страницу о каждом отправлении в реал-тайме, вот что я хочу, ребята. Можно такое забубенить?
0
|
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
|
|
24.05.2014, 10:01 | 4 |
можно через веб-сокеты, ну или ajax-ом каждый раз отправлять и смотреть сколько отправилось. Отдавать кусками не получится, вы работает по HTTP протоколу, отдал ответ и забыл.
0
|
1 / 1 / 0
Регистрация: 23.05.2014
Сообщений: 15
|
|
24.05.2014, 12:29 [ТС] | 5 |
0
|
65 / 64 / 33
Регистрация: 25.02.2014
Сообщений: 229
|
|||||||||||
25.05.2014, 07:37 | 6 | ||||||||||
Несколько я помню. если вы не используете буферизацию вывода и сжатие трафика, то командами типа echo данные отправляются немедленно.
Например у меня основная страница выглядит так:
0
|
1 / 1 / 0
Регистрация: 23.05.2014
Сообщений: 15
|
|
25.05.2014, 12:12 [ТС] | 7 |
Неистово благодарю! Сегодня попробую сей метод реализации и отпишусь по результатам.
Добавлено через 5 минут А ещё вопрос по этой записи
0
|
65 / 64 / 33
Регистрация: 25.02.2014
Сообщений: 229
|
|
25.05.2014, 13:40 | 8 |
Сообщение было отмечено Rized как решение
Решение
Я вам привел кусок шаблона страницы реального проекта синхронизации кода из svn, git и тп. с боевым проектом (по нажатию одной кнопки, забирается код из системы контроля версий, гоняются тесты, если все ок, вычисляются изменения и отправляются на боевой сервер).
И /projects/start_sync?{$id}{$ignore_externals} ни что иное как адрес запуска скрипта, результаты которого выводятся во фрейме (параметры {$id}{$ignore_externals} формируются динамически и грузятся в шаблон, шаблонизатор на выводе подставляет туды нужные значения). Не загонайтесь Для вас это адрес вашего скрипта.
0
|
1 / 1 / 0
Регистрация: 23.05.2014
Сообщений: 15
|
|
26.05.2014, 14:35 [ТС] | 9 |
В общем, переписал всё дело по аналогии с примером выше. Положительного результата не получил. Что интересно - испытывал работу flush() в другом коде - работает. Подставляю в тот же код функцию отправки писем - не работает. Видать, дело в mail(params)
Ещё варианты есть? Я пока вывожу результат в текстовый файл, но всё же хотелось бы чего-нибудь менее "костыльного".
0
|
1 / 1 / 0
Регистрация: 23.05.2014
Сообщений: 15
|
|
27.05.2014, 19:04 [ТС] | 10 |
В конечном счёте сделал всё через Ajax. Алгоритм такой: на основной странице размещается Ajax-вызов "рассыльщика"(php), который записывает адрес получателя, время отправки и результат в txt-файл, а по завершении рассылки возвращает ее статус. Прямо за ним следует вызов зацикленной (рекурсивно, через setTimeout()) функции, обрабатывающей Ajax-запрос 2му php-скрипту, который парсит txt-файл с инф. о рассылке и возвращает все данные из него jQuery, который "рефреширует" на их основе текст на экране. В самой JS-функции разлеглись парочка управляющих рекурсией If'ов.
Это так, если кому интересно будет. Всем спасибо, особенно vasiatka, а я пойду дебажить код
0
|
27.05.2014, 19:04 | |
27.05.2014, 19:04 | |
Помогаю со студенческими работами здесь
10
Постепенное добавление данных на страницу по мере получение из скрипта Отображение выполнения серверного скрипта Вывод данных в форму по мере выполнения программы Завершение выполнение php скрипта, после выполнения if Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |