Palavra:   

Revista PHP / PHP

Flávia Jobstraibizer

Analista de sistemas, DBA Mysql, PostgreSQL, Oracle, SQLServer e Firebird. Desenvolvedora de sistemas, e administradora de servidores FreeBSD. Conheça o site www.flaviajobs.com.br

Utilizando a função sleep()

Neste artigo, vou abordar de maneira clara, a utilização da função sleep() do php, de forma que os desenvolvedores que possuem sistemas de envio de mala direta virtual e dependem de limitações de envio do servidor, possam se utilizam de um script dinâmico e ao mesmo tempo, funcional.

É sabido que grande parte dos provedores de hospedagem, limitam a quantidade de envio de emails, geralmente em 300 por hora. Há de se verificar com seu provedor, qual a limitação, mas neste artigo, vamos trabalhar com este padrão.

Função sleep()
O que é: A função sleep atrasa a execução de um código, de acordo com a quantidade de segundos informados no parâmetro seconds da função.

Ex: sleep(20);
Isso significando que a execução do script será atrasada em 20 segundos.
(se você precisa trabalhar com milisegundos, utilize a função usleep() (funciona exatamente igual à função abordada neste artigo).

Vamos ao código.

<?php 
// Incluimos o arquivo de conexão com o banco
require_once('conn2.php'); 
?>
<?php 
// selecionando os emails no banco de dados mysql_select_db($database_conn2, $conn2); $query_RSemails = "SELECT * FROM emails"; $RSemails = mysql_query($query_RSemails, $conn2) or die(mysql_error()); $totalRows_RSemails = mysql_num_rows($RSemails); // assunto e mensagem para ser enviada. // mensagem resgatada de um formulário padrão de envio, // através do método POST $assunto = "Meu envio de emails"; $mensagem = $_POST['mensagem']; // contador de emails que servirá para a função sleep
$cont = 0; // abertura do while de envio dos emails cadastrados
// previamente em um banco de dados mysql

while ($row_RSemails = mysql_fetch_assoc($RSemails)) {
$paraemail = $row_RSemails['email'];
$nome = $row_RSemails['nome']; // função sleep
// assim que a variável $cont, chegar em 300,
// o script irá ser atrasado em 500 segundos

$cont = $cont + 1;
if ($cont == 300) {
flush(); sleep (500);
$cont = 0;
}
mail("$paraemail","$assunto","$mensagem");
} // fecha o while de envio dos emails
?>

Assim sendo:
O contador de envio, ao sinalizar o limite que impomos, atrasa a execução do código, de acordo com o parâmetro de segundos informado. Após o período “dormindo”, o contador será zerado, continuando o while até os próximos 300 registros, onde irá ser atrasado de novo, e assim por diante.

Se você tem dúvidas, pode me procurar no: fjferr@gmail.com

Opções de Interação

Comentários

Interessante..
Por: Bruno, 03/11/2008   17:54:52
Não tinha pensado nessa utilidade para a função até agora.

Meu módulo para envio de e-mail marketing usa refresh via javascript. Até mesmo porque eu atualizo varios dados na tela de envio para acompanhamento..

Devido a esta atualização de dados na interface, acho melhor o refresh em Js pois teria de utilizar Ajax e acabaria utilizando mais uma Query..

Enfim.. parabéns! Estou lendo seus artigos aqui e achei bastante coisa legal.
a mesma dúvida do colega acima, é preciso manter o
Por: Luiz, 31/05/2007   23:52:09
Olá Flávia....

Primeiramente parabéns pelo artigo
http://www.revistaphp.com.br/artigo.php?id=36

Vi uma dúvida de um usuário, e gostaria também de saber a resposta...

Você pode nos informar se é necessário manter o browser aberto para que continue executando o código que fica experando XXX segundos para que ele continue executando a função? ou eu posso fechar o browser que depois de determinado tempo o mesmo com o browser fechado o script continua a rodar???

nos de alguma dica,,,

todos nos estamos na dúvida, sera essa função sleep a solução para nossos problemas de "desenvolvedores iniciantes" no que diz respeito a envio de newsletters?

um grande abraço.

tenha um ótimo dia.
Nossa
Por: Bianca, 22/12/2006   04:51:31
Muito bom isso heim, com isso posso mandar muitos e-mails sem problema.
Resposta
Por: Flávia, 17/11/2006   02:48:31
Claro que sim, senão o processo será fechado. Como o servidor vai identificar uma página que não existe?...
legal
Por: José Antonio, 16/11/2006   13:18:11
muito legal bem explicativo

só 1 dúvida

precisa ficar com o browser aberto enquanto o script está em sleep?