Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Brambilla

[Resolvido] tem como pausar o looping de for?

Recommended Posts

Boa tarde tenho uma função que enviará emails

gostaria que a cada 6 envios desse uma pausa de uma hora no looping de for

com ajuda do javascript

$n_env = 0;
for($i=0;$i<$envio;$i++)
        {
	$n_env++;
	$enviar[$i].= $mails_ex[$i];
	//echo $i.': '.$enviar[$i].'<br>';
	if($n_env == $resp)
		{
		$n_env = 0;	
		$ano = date("Y"); $mes = date("m"); $dia = date("d"); $hora = date("H"); $min=date("i"); $seg=date("s");
		//$hora = $hora +1;
		
		?>
                <script type="text/javascript">
		window.onload=function()
		    {  
		    atualizaContador('<?php echo $ano;?>','<?php echo $mes;?>','<?php echo $dia;?>','<?php echo $hora;?>','<?php echo $min;?>','<?php echo $seg;?>','saida');  
		    }
	            </script>
            <div id="saida"></div>
     		<input type="text" name="tempo" id="tempo" value="" />
		<?php
		if($tempo == ''){break;} else {echo 'eee';}
		}
		else
		{
		echo '<br>Enviando...';	
		}
a função javascript recebe o valor pelo innerHTML

será que tem alguma forma de fazer isto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, é só usar o break

 

exemplo :

 

<?php
	for ($i=0;$i<=10;$i++)  {
		if ($i == "5") {
			break;
		}
		echo $i;
	}
?>

Com o PHP use sleep.

 

 

tambem da com o sleep

 

exemplo :

 

<?php
	for ($i=0;$i<=10;$i++)  {
		if ($i == "5") {
			sleep("2");
			
		}
		echo $i;
		flush(); # usei o flush para ele mostrar algo antes de terminar todo a execução do script!
	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, para pausar o loop, você pode usar o sleep, mas não consegui entender o seu código. Tá meio confuso. Vejamos um exemplo do for.

for($i = 0; $i ++ < $envio;) {
	// aqui dentro você coloca o código para enviar o e-mail
	// se for múltiplo de 6, para 1 hora (3600 segundos)
	if (($i % 6) == 0)
		sleep ( 3600 );
}

Veja se compreende. Qualquer dúvida, volte a perguntar.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou tentar usar o sleep

meu código ta meio confuso pq estou tentando fazer vários testes disculpa ai hehe

é que assim

eu posso enviar 200 emails por hora e 30 emails por envio certo

eu atéconsegui o contator em javascript para mostrar ao usuário quanto o tempo que falta

depois que contasse 1 hora continuar enviando

estava pensando se caso o usuário atualiza-se a pagina continuar contanto do ponto que parou para isso ireit gravar a hora no banco e chamar com a função javascript,

se tivesse como fazer ficaria muito legal essa ferramenta e o sleep(); acredito ele reiniciaria né

alguém tem uma idéia

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, para enviar e-mail neste caso o melhor é dar o sleep a cada envio. Por exemplo, se você pode enviar 200 e-mails por hora, então você pode enviar 1 e-mail a cada 18 segundos. Então, ficaria mais ou menos assim:

 

while ($row = mysql_fetch_assoc()){
     // envia email
     // faz um update no banco, para dizer que enviou este e-mail
    sleep (18);
}
Assim você não sobrecarrega o servidor com 200 e-mails de uma só vez e ficando 1 hora parado. Assim você não vai passar do máximo permitido e não vai sobrecarregar o servidor também. O ideal é executar este tipo de script via CronJob(Linux) ou Agendador de Tarefas(Windows) para não precisar ficar com o navegador aberto enquanto envia.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bota o Cronjob pra executar o arquivo de disparo, e nesse arquivo de disparo coloca um set_time_limit( 0 ) para a execução não ter limite de tempo.

Feito é só deixar rolar :D.

 

Muito importante a dica do André. Sem o set_time_limit o script será encerrado por tempo limite, provavelmente antes de finalizar a execução.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

realmente da problema

set_time_limit('0') ;
sleep ("10");
é normal o navegador ficar carregando e não mostrar nada?

 

Sim, ele nao vai mostrar nada até terminar a execução... ou voce pode por um flush()!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.