Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: отправка писем частями
 
 автор: vadimka   (21.02.2011 в 18:30)   письмо автору
 
 

Здравствуйте!
хостер установил ограничение на рассылку (300 писем в час) адинистратор сайта кликает где-то утром рассылку, как мне ее разбить на части?

#$num1 количество подписчиков из базы
#$email массив адресов, подписавщихся на рассылку
for($i=0; $i<=$num1; $i++){
echo $email[$i]."<br>";
mail($email[$i], $subject, $message, $headers,$five);
}

  Ответить  
 
 автор: neadekvat   (21.02.2011 в 18:51)   письмо автору
 
   для: vadimka   (21.02.2011 в 18:30)
 

гы, чо.
for($i=0; $i<=$num1; $i++){ 
echo $email[$i]."<br>"; 
mail($email[$i], $subject, $message, $headers,$five); 
if ($i & 300 == 0)
sleep(3600);
}

  Ответить  
 
 автор: vadimka   (21.02.2011 в 19:09)   письмо автору
 
   для: neadekvat   (21.02.2011 в 18:51)
 

не понял...
мне показалось, что вроде в это направление:

$part=0;
for($i=$part; $i<=$num1; $i++){
mail($email[$i], $subject, $message, $headers,$five);
$sum=$num1-$part;
if ($part>300){
$part+300;}else{
$part+$sum;        
    } 
sleep(3600);
}

  Ответить  
 
 автор: vadimka   (22.02.2011 в 16:40)   письмо автору
 
   для: vadimka   (21.02.2011 в 19:09)
 

нашел такой скрипт:

set_time_limit(0);
foreach ($email as $i)
{
  mail ($i, 'Subscription', 'Text');
  sleep (12);
}

правильный ли он?

  Ответить  
 
 автор: cheops   (22.02.2011 в 16:51)   письмо автору
 
   для: vadimka   (22.02.2011 в 16:40)
 

Зависит от того, что вам требуется и как вы формируете массив $email. Если он отсылает то, что вам требуется - он правильный.

  Ответить  
 
 автор: vadimka   (22.02.2011 в 16:52)   письмо автору
 
   для: cheops   (22.02.2011 в 16:51)
 

тогда еще вопрос - если закрывается страница, его вызвавщая, скрипт работает дальше?

  Ответить  
 
 автор: cheops   (22.02.2011 в 16:56)   письмо автору
 
   для: vadimka   (22.02.2011 в 16:52)
 

Не факт, может и прекратиться. Вообще такие задачи лучше на cron вешать - тогда они гарантировано будут выполняться до конца.

  Ответить  
 
 автор: Trianon   (22.02.2011 в 16:56)   письмо автору
 
   для: vadimka   (22.02.2011 в 16:52)
 

нет.
Его выполнение прекращается вместе с процессом обработки HTTP-запроса.

  Ответить  
 
 автор: vadimka   (22.02.2011 в 17:10)   письмо автору
 
   для: Trianon   (22.02.2011 в 16:56)
 

администратор, делает рассылку в ручном режиме. можно как-то без крона? или php работает ТОЛЬКО при открытой странице в браузере?

  Ответить  
 
 автор: cheops   (22.02.2011 в 17:17)   письмо автору
 
   для: vadimka   (22.02.2011 в 17:10)
 

Скажем так, сервер заинтересован в работе только тогда, когда уверен, что пользователь еще заинтересован в результате. А почему бы администратору немного подождать, ясно, что обычные пользователи ждать не будут, но речь вроде идет об одном человеке, который во-первых дисциплинирован, во-вторых заинтересован в результате. Обычно проблем нет, ждут столько, сколько надо (правда, если ждать придется часами - браузер пошлет отбой или выйдет тайм-аут у сервера). В этом плане sleep() очень вреден, он только в случае cron полезен (и то не всегда), его обязательно использовать?

  Ответить  
 
 автор: vadimka   (22.02.2011 в 17:26)   письмо автору
 
   для: cheops   (22.02.2011 в 17:17)
 

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

  Ответить  
 
 автор: cheops   (22.02.2011 в 17:31)   письмо автору
 
   для: vadimka   (22.02.2011 в 17:26)
 

Я бы знаете как сделал, вывел бы несколько ссылок, каждая из которых отправляет 300 писем без всякой задержки (ну 250 на всякий случай), при каждом нажатии, помещал бы в базу данных флаг по которому вместо других ссылок выводил бы надпись "Отправить следующую партию можно только через 1:00:00" (при перезагрузке время обновлялось бы). Ссылки на отосланные партии, разумеется выводить не нужно.

  Ответить  
 
 автор: cheops   (22.02.2011 в 17:33)   письмо автору
 
   для: vadimka   (22.02.2011 в 17:26)
 

А еще можно вот как - отправлять все письма как есть, но проверять отправилось письмо или нет, те e-mail, по которым письмо не отправилось, запоминать и пытаться отправить в следующий заход администратора.

PS Ну это в том случае, конечно, если mail() честно возвращает false, когда срабатывает ограничение на рассылку.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования