Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: sleep в цикле foreach

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: не могу понять почему неправильно работает
Lipser
Отправлено: 21 Августа, 2014 - 15:57:39
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




Добрый день всем!
Вторую неделю изучаю php )) Какие то непонятки получается решить самому при более внимательном изучении кода, какие то не могу понять совсем, поэтому прошу помощи.

Сейчас столкнулся с непонятным для меня поведением sleep в цикле foreach. Задача скрипта рассылать клиентам сообщения, не превышая разрешенное хостером в час. Для этого в цикл рассылки был вставлен оператор sleep:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2.   if ( (isset($_POST['submit'])) && (isset($_FILES['file'])) && ($_FILES['file']['name'] != null) )
  3.  {
  4.      
  5.         // Формируем массив с адресами email для рассылки
  6.         $fileString = file_get_contents($_FILES['file']['tmp_name']);
  7.         $emailsArray = explode("\n",$fileString);
  8.  
  9.         // Подсчитываем кол-во адресов
  10.         $emailsCount = count($emailsArray);
  11.         $emailsCountTotal = $emailsCount;
  12.  
  13.         // Отправляем сообщения
  14.         foreach($emailsArray as $email)
  15.         {
  16.         echo 'Осталось отправить '.$emailsCount.' из '.$emailsCountTotal.'. Отправляем сообщение для: '.$email.'<br />';
  17.         mail($email,$_POST['subject'],$_POST['message']);
  18.         sleep(5);
  19.         $emailsCount--;
  20.         }
  21. }      
  22. ?>
  23.  


Подразумевается, что после отправки каждого сообщения будет выдерживаться пауза в 5 секунд, после чего цикл продолжится. На самом деле это не работает: после нажатия submit браузер дает понять что все еще продолжается загрузка в течение имхо больше 5 секунд, после чего скрипт отправляет все сообщения разом.
Подскажите, что я не так делаю ?

P.s. Скрипт пока черновой, без проверок и прочих прелестей, сейчас надо только отработать механизм.
 
 Top
esterio
Отправлено: 21 Августа, 2014 - 16:01:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




потому-что вывод буферизируеться самим PHP. когда он отработал то и виводит все зразу. Кажись поможет http://ua2.php.net/manual/ru/function.flush.php
 
 Top
Tyoma5891
Отправлено: 21 Августа, 2014 - 16:07:33
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




запускайте по крону или ему подобным...
 
 Top
Lipser
Отправлено: 21 Августа, 2014 - 16:09:12
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




Так уже пробовал, не помогает. Как правильно сделать ?

И сразу еще одна нерешенная проблема - как выводить сообщения из цикла об оставшихся отправках в одной и той же строке ? иначе при получается некрасивый длинный листинг из сообщений...
(Добавление)
[quote=Tyoma5891][/quote]
А как по крону ? Если у меня в списке будет допустим 120 адресов, а ограничение у хостера до 100 сообщений в час ? Он же мне все равно все разом отправит...
 
 Top
Tyoma5891
Отправлено: 21 Августа, 2014 - 16:16:01
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




Lipser пишет:

А как по крону ? Если у меня в списке будет допустим 120 адресов, а ограничение у хостера до 100 сообщений в час ? Он же мне все равно все разом отправит...

заносите список в эксель или в бд в табличку и вперед) а в кроне настраиваете периодичность запуска скрипта)
 
 Top
Lipser
Отправлено: 21 Августа, 2014 - 16:37:16
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




Tyoma5891 пишет:
заносите список в эксель или в бд в табличку и вперед

Не, это для меня пока mission imposible ))
у меня нет конкретной задачи это реализовать, я для себя научиться хочу...
 
 Top
Tyoma5891
Отправлено: 21 Августа, 2014 - 16:39:26
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




Lipser пишет:
Tyoma5891 пишет:
заносите список в эксель или в бд в табличку и вперед

Не, это для меня пока mission imposible ))
у меня нет конкретной задачи это реализовать, я для себя научиться хочу...

так это как раз и будет хорошим обучением и познованием нового Улыбка
 
 Top
Lipser
Отправлено: 21 Августа, 2014 - 16:55:58
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




начинает приходить понимание, что если адресов будет 1000, то на выполнение скрипта уйдет 10 часов, при этом браузер нельзя закрывать ..
Как это правильно сделать через cron? )) там какая логика работы? Браузер будет открываться или передаваться на выполнение будет сам скрипт php?
 
 Top
Tyoma5891
Отправлено: 21 Августа, 2014 - 17:01:16
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




если через cron браузер Вам не нужен)
 
 Top
Ch_chov
Отправлено: 21 Августа, 2014 - 17:15:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Отмечайте клиентов которым уже отправили сообщение. Тогда можно будет каждый час отправлять определённое количество писем одновременно, без sleep.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB