Вставка предупреждения "идет загрузка" при передаче почтового сообщения

  • Автор темы Автор темы KAnt23
  • Дата начала Дата начала

KAnt23

Новичок
Данные передаются из формы в скрипт отправки почты. Необходимо, чтобы во время отправки почты (около 5 минут) на экране висела надпись типа "подождите идет загрузка". Функции echo и flush не проходят из-за буферизации на сервере: сообщение о загрузке выводится на экран только после передачи всех данных адресату. Что делать?
 
Нужно запустить рассылку отдельным процессом. Страницу регулярно обновлять и отображать состояние того процесса.
 
Просто очищайте буфер неявно, и вам вообще не понадобится flush
 
Нет, не приведу. Задача в общем не самая тривиальная, чтобы ее можно было набросать на коленке. Требуется тщательность и привязка к условиям эксплуатации.
 
Нет, не приведу. Задача в общем не самая тривиальная, чтобы ее можно было набросать на коленке. Требуется тщательность и привязка к условиям эксплуатации.
Вот мой кусок кода (нерабочий):
...
include "../res/x5engine.php";
...
echo "<H2>Подождите, идет загрузка...</H2>";
$email = new imSendEmail();
$email->sendFormEmail($settings['imEmailForm_3_2'], $form_data, $files_data);
...
Как его изменить? Функции new imSendEmail и sendFormEmail содержатся в скрипте x5engine.php
 
У вас не особо сложная задача, более "костыльный вариант", не требующий универсального решения.
Используйте echo для вызова нужного JS-скрипта, отправьте соответствующие заголовки запрещающие кэширование, ну и напишите функцию которая будет положение вашего "индикатора" определять.
Для неявной очистки включите ее посредствам ob_implicit_flush();
Вот и все решение вашей задачи.
Погуглите. Ответ найдете быстро, я уверен.
 
KAnt23, такого рода задачи не предназначены для обычной схемы веб-приложения. Надо запускать либо консольно, либо хорошонько изголиться для веба. Если у вас недостаточно опыта в таких делах, то советов с форума будет недостаточно.

Sna@IK,что опять ты "недочитал" из вопроса? Хорош уже несусветную херню нести в очередной раз.
 
Я все прекрасно дочитал, зачем человеку при рассылке, которому просто нужен фоновый индикатор (посмотрите на кусок кода, не смешите меня) нужно реализовывать многопоточность.
Извиняюсь конечно, но в данный момент "несусветную херню" несете вы.
 
У вас не особо сложная задача, более "костыльный вариант", не требующий универсального решения.
Используйте echo для вызова нужного JS-скрипта, отправьте соответствующие заголовки запрещающие кэширование, ну и напишите функцию которая будет положение вашего "индикатора" определять.
Для неявной очистки включите ее посредствам ob_implicit_flush();
Вот и все решение вашей задачи.
Погуглите. Ответ найдете быстро, я уверен.

Спасибо, но я не совсем понял, если я вставлю заголовки и использую ob_implicit_flush(); то я могу через echo могу отражать обычный текст без задержки и мне не надо писать даже JS-скрипт. Это так?
 
Почему=) Вам JS скрипт (на том же jQuery), нужен будет просто для изменения позиции прогресс бара. (это функция, в которую будете передавать нужное положение progress bar'a).
Далее, вам нужна функция (уже на PHP), которая будет определять положение бара в зависимости от процесса (задачи). Запущена она будет циклически.
В ней вы можете делать что хотите, если у вас не циклический процесс (например, передача данных), то процесс можно разбить на состовные (в зависимости от готовности частей и будет определение progress bar'a).
А через echo вы вызываете JS скрипт, который и будет отражать текущее состояние прогресс бара динамически, именно за счет неявной очистки буфера.
Если вы до сих пор еще не смогли найти решение, вы явно не гуглили. Решений куча. Для вашего - многопоточность точно не нужна (можно было бы реализовать, но это сложновато и не целесообразно для вашего примера).
 
Почему=) Вам JS скрипт (на том же jQuery), нужен будет просто для изменения позиции прогресс бара. (это функция, в которую будете передавать нужное положение progress bar'a).
Далее, вам нужна функция (уже на PHP), которая будет определять положение бара в зависимости от процесса (задачи). Запущена она будет циклически.
В ней вы можете делать что хотите, если у вас не циклический процесс (например, передача данных), то процесс можно разбить на состовные (в зависимости от готовности частей и будет определение progress bar'a).
А через echo вы вызываете JS скрипт, который и будет отражать текущее состояние прогресс бара динамически, именно за счет неявной очистки буфера.
Если вы до сих пор еще не смогли найти решение, вы явно не гуглили. Решений куча. Для вашего - многопоточность точно не нужна (можно было бы реализовать, но это сложновато и не целесообразно для вашего примера).
Вы меня действительно не поняли. Я не так силен в программировании на php. Для начала я хотел бы разобраться, как мне избежать буферизации на сервере. Даже функция flush не помогает, если ее вставить вместо echo с простейшим сообщением. На этом этапе мне прогресс бар не нужен. Я просто запрашивал простейший метод обойти эту особенность при выводе данных через php.
 
Сверху