SearchEngines.bg

Това е примерно съобщение за гост. Регистрирайте безплатен акаунт днес, за да станете потребител на SearchEngines.bg! След като влезете, ще можете да участвате в този сайт, като добавите свои собствени теми и публикации, както и да се свържете с други членове чрез вашата лична входяща кутия! Благодарим ви!

sleep() и раздляне на порции при пращане на мейл

bgkulinar

Меринджей
Имам един скрипт, който праща нюзлетъри, но юзърите вече са доста и искам да му дам забаване и изпращане на порции. Това, което праща писмата е от ред 75 до ред 140. Аз съм добавил ред 116
PHP:
if ($br>0 && $br%2==0) {sleep(15);}
, обаче нещо не действа правилно. В смисъл тествах го при 6 и при 8 мейла и слипва и в двата случая два пъти по 15 секунди (а по моята логика трябва да слипне 3/4/ по 15 сек). Освен това по някаква причина праща с един/два мейла по-малко.

Всяка конкретна помощ е добре дошла.
 
За: sleep() и раздляне на порции при пращане на мейл

За: sleep() и раздляне на порции при пращане на мейл

Слагаш
PHP:
$br = 100; // праща 100 бройки и спи

$i = 0;

//след което във форийча 

if ($i % $br == 0) {
  sleep(15); // спи по 15 секунди на всеки 100 изпратени имейла
}


$i++;
 
За: sleep() и раздляне на порции при пращане на мейл

За: sleep() и раздляне на порции при пращане на мейл

PHP:
		$throttle = 100;
		$numSended = 0;
		for($br=0;$br<$NR;$br++){
		  
		  if ($numSended % $throttle == 0) {
        sleep(15); // sleep
      }
      
			if(checkEmail(db_result($RES1, $br, "mailtosend"))){
				$t = new Template("../email_templates", "remove");
				$SQL = "SELECT template_file FROM maillist_template, maillist_email WHERE email_id=".$id." AND email_template=template_id";
				$RS = db_exec(1, $SQL);
				$tf = db_result($RS, 0, "template_file");
				$t->set_file(array("page" => $tf));
				$t->set_var(array(
				"DATE" => date("F d Y", strtotime("now")),
				"NAME" => db_result($RES1, $br, "finalname"),
				"TITLE" => $subject,
				"BODY" => $content,
				"EMAILID"=> $id,
				"HOST" =>"http://".$HTTP_HOST,
				"DEAR" => $translator->translate("DEAR"),
				"Click_here" => $translator->translate("Click_here"),
				"removed_from_maillist" => $translator->translate("removed_from_maillist"),
				"Recomend_to_friend" => $translator->translate("Recomend_to_friend"),
				"EMAIL" => db_result($RES1, $br, "mailtosend")
				));
				$t->parse("OUT", array("page"));
				$maillist_email =  $t->get_var("OUT");
				mail(db_result($RES1, $br, "mailtosend"), $subject, $maillist_email, "From: $email_from\nContent-Type: text/html;\n charset=utf-8;\n");
				//mailque($dbconnmail, db_result($RES1, $br, "mailtosend"), $subject, $maillist_email, "From: (".$email_from.")\nContent-Type: text/html;\n charset=utf-8;\n");
				
				$numSended++;
			}
 
За: sleep() и раздляне на порции при пращане на мейл

За: sleep() и раздляне на порции при пращане на мейл

Не става, колега. Пак слипва 2х15 и пак не праща всички мейлове. Когато махна слипването, си праща на всички мейли.
 
Re: За: sleep() и раздляне на порции при пращане на мейл

Re: За: sleep() и раздляне на порции при пращане на мейл

Не става, колега. Пак слипва 2х15 и пак не праща всички мейлове. Когато махна слипването, си праща на всички мейли.

имах подпбен проблем с пращане на по 1000 мейла няколко пъти на ден на потребителите.
Ето как го реших.
След като сайта реши на кои да праща им добавя мейлите в една нова таблица в БД. Има следните колони, име, мейл, пратено (0 или 1), пратено на, прочетено на
На тебе може да не ти трябват всичките.
Имам един елементарен пчп скрипт който селектира 10 мейла който са 'пратено = 0' и ги праща след това ги маркира с 1 и слага дата и час на пращане. С КРОН това го прави всеки 5 мин. Линка в мейла е с ид и когато отворат страницата в мейл таблицата се вижда кога е направено.
Това е идеята. Много по-лесно за следене кое кога е пратено.
 
Последно редактирано:
За: sleep() и раздляне на порции при пращане на мейл

За: sleep() и раздляне на порции при пращане на мейл

Мерси на всички, засега проблемът се оказва във max execuition time.
 
Re: sleep() и раздляне на порции при пращане на мейл

Със sleep() няма да стане, сървъра си има време за изпълнение на скрипта от 30 секунди по подразбиране. С първите две изчаквания по 15 секунди вече скрипта умира. Ще ми е интересно ако намериш решение, защото ми трябва и на мен, а не съм открил такова.
 
Re: sleep() и раздляне на порции при пращане на мейл

Ще ми е интересно ако намериш решение, защото ми трябва и на мен, а не съм открил такова.

Решението се нарича cron.
 
За: sleep() и раздляне на порции при пращане на мейл

За: sleep() и раздляне на порции при пращане на мейл

Крон и опашка е най-добрия вариант да, но неговия скрипт не е написан за този метод.
 
За: Re: sleep() и раздляне на порции при пращане на мейл

За: Re: sleep() и раздляне на порции при пращане на мейл

Със sleep() няма да стане, сървъра си има време за изпълнение на скрипта от 30 секунди по подразбиране. С първите две изчаквания по 15 секунди вече скрипта умира.
Не твърдя, че разбирам много, но имам скрипт на същия сървър, който прави sleep(30) поне стотина пъти и работи безотказно - оставям го да бичи цяла нощ и на сутринта си е свършил работата.
 
Re: За: Re: sleep() и раздляне на порции при пращане на мейл

Re: За: Re: sleep() и раздляне на порции при пращане на мейл

Не твърдя, че разбирам много, но имам скрипт на същия сървър, който прави sleep(30) поне стотина пъти и работи безотказно - оставям го да бичи цяла нощ и на сутринта си е свършил работата.

това за времето на изпълнение зависи главно как ти е настроен сървъра. при споделен хостинг е много малко, но ти ако си на ВПС това не е проблем да го направиш голямо. Все пак ми се стрва, че крон е по-добрия вариант.
 
За: sleep() и раздляне на порции при пращане на мейл

За: sleep() и раздляне на порции при пращане на мейл

ВПС е и няма как с този скрипт да се направи с крон. Трябва да се пренаписва.
 
Re: За: sleep() и раздляне на порции при пращане на мейл

Re: За: sleep() и раздляне на порции при пращане на мейл

ВПС е и няма как с този скрипт да се направи с крон. Трябва да се пренаписва.

Като не искате да се пренаписва, вдигнете max_execution_time или го сложете да е нула. Ако това не помогне, значи грешката е логическа.
 
За: Re: За: sleep() и раздляне на порции при пращане на мейл

За: Re: За: sleep() и раздляне на порции при пращане на мейл

Като не искате да се пренаписва, вдигнете max_execution_time или го сложете да е нула. Ако това не помогне, значи грешката е логическа.
Вдигнато е на 2500, но пак спира изпълнението на 30-тата секунда. Относно логиката, файлът е на първа страница на темата.
 
За: sleep() и раздляне на порции при пращане на мейл

За: sleep() и раздляне на порции при пращане на мейл

Сложи го на 0, не може да го спира на 30-тата секунда ако наистина 2500 секунди, просто няма вариант.
 
За: sleep() и раздляне на порции при пращане на мейл

За: sleep() и раздляне на порции при пращане на мейл

Сложи го на 0, не може да го спира на 30-тата секунда ако наистина 2500 секунди, просто няма вариант.
Сложих го, още като си чатихме с теб и нямаше ефект.
 
За: sleep() и раздляне на порции при пращане на мейл

За: sleep() и раздляне на порции при пращане на мейл

Здравейте,
Възможно ли е рнр-то да е пуснато в safe mode ? Тогава set_time_limit () няма да въздейства на максималното време за изпълнение на скрипта.
Този вторият скрипт, който работи без проблем, от крон задача ли се пуска ?
По подразбиране max_execution_time = 0 при пускане на скрипта от командният ред в това число и крон задача.
Какво показва phpinfo(); за max_execution_time преди и след задаването на set_time_limit(0) ?
Поздрави,
Константин.
 
За: sleep() и раздляне на порции при пращане на мейл

За: sleep() и раздляне на порции при пращане на мейл

imagination каза:
Възможно ли е рнр-то да е пуснато в safe mode ?
Мдам, гледам в пхп.ини че safe_mode = Off

imagination каза:
Този вторият скрипт, който работи без проблем, от крон задача ли се пуска ?
Не, от уеб интерфейс е, но е на друга версия на ПХП и явно там е сетнато по различен начин.

imagination каза:
Какво показва phpinfo(); за max_execution_time преди и след задаването на set_time_limit(0) ?
Преди показваше 2500 (колкото си го бях сетнал), след това показва 0.

Колега, благодаря, мисля че това ще оправи проблемите.
 

Горе