<< Aula anterior | Sumário do Curso | Próxima aula >>
Fala, dev! Chegando na área com mais um truque essencial para o seu cinto de utilidades.
Na grande maioria das vezes, nosso objetivo como programadores é fazer o código rodar o mais rápido possível, certo? Mas e se eu te disser que existem momentos em que o seu sistema precisa pisar no freio e esperar?
É exatamente para isso que serve a função sleep(). Ela recebe como argumento um número inteiro (em segundos) e literalmente "trava" (pausa) a execução do script por aquele período. Vamos entender como ela funciona na prática e, mais importante, os perigos ocultos que a maioria dos cursos básicos não te ensina.
Como atrasar a execução de um script (O Básico)
A sintaxe é extremamente simples. No exemplo abaixo, pedimos ao servidor que imprima uma mensagem, durma por 3 segundos, e depois continue o trabalho.
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<title>Apostila PHP Progressivo</title>
</head>
<body>
<h3>Iniciando o processamento...</h3>
<?php
echo "Atrasando 3 segundos...<br>";
// O PHP fará uma pausa de exatos 3 segundos
sleep(3);
// Acorda e continua a execução
echo "Obrigado por esperar! Processo concluído.";
?>
</body>
</html>
ob_implicit_flush(true); e flush(); antes do sleep().
Quando eu devo usar o sleep() na vida real?
Você não vai usar isso para irritar o usuário fazendo a página demorar, obviamente. No mercado de trabalho real, usamos o sleep() principalmente no Back-end e em Tarefas Cron (Jobs):
- Consumo de APIs (Rate Limiting): Muitas APIs (como Twitter, Google, ou sistemas de pagamento) bloqueiam o seu IP se você fizer muitas requisições por segundo (Erro HTTP 429). Usamos o
sleep()no meio de um laçowhileouforpara pausar o robô e evitar o bloqueio. - Web Scraping: Se você está criando um bot para ler dados de outro site, acessar 100 páginas em 1 segundo vai derrubar o servidor alvo (e te banir). O
sleep()simula o comportamento humano. - Aguardar um serviço externo: Dar tempo para que um banco de dados termine uma inserção pesada ou um arquivo termine de ser transferido via FTP.
O Nível Micro: Conheça a função usleep()
O sleep() só aceita segundos inteiros (1, 2, 3...). E se você quiser pausar o script por apenas meio segundo (0.5s)? Para isso, usamos o usleep() (Micro-sleep).
Ele recebe o valor em microssegundos (1 segundo = 1.000.000 de microssegundos).
<?php
echo "Pausando por meio segundo...<br>";
// 500.000 microssegundos = 0.5 segundos
usleep(500000);
echo "Voltamos!";
?>
Saia do Básico e Domine o PHP Profissional
Entender as minúcias de buffers, tempo de execução e travamento de sessão é o que as empresas procuram em testes práticos para vagas Júnior e Pleno. Se você quer ter todo o nosso material didático na palma da mão, organizado do zero ao avançado, sem depender de internet, a nossa Apostila é para você.
Baixar Apostila de PHP Agora 🚀
⚠️ O Perigo Oculto: Travamento de Sessão e max_execution_time
Como prometi, aqui está o conteúdo avançado que vai salvar sua pele:
1. O Limite de Tempo do PHP: Por padrão, o PHP tem um limite máximo de execução (geralmente 30 segundos, definido no php.ini). Se você criar um loop com vários sleep() que ultrapasse esses 30 segundos, o servidor vai estourar um Fatal Error (Maximum execution time exceeded) e matar seu site. Sempre que trabalhar com longas esperas, ajuste a função set_time_limit(0);.
2. O Bloqueio de Sessão (Session Locking): Esse erro é clássico! Se você usar session_start() e logo depois um sleep(10), o PHP bloqueia o arquivo de sessão daquele usuário por 10 segundos. Se o mesmo usuário tentar abrir outra aba do seu site ou fazer uma requisição AJAX simultânea, o site inteiro vai parecer travado para ele até o sleep terminar.
Como resolver: Use a função session_write_close(); antes do sleep para liberar a sessão para outras abas!
Continue Explorando:
Agora que você sabe dominar o relógio do servidor, avance para os próximos tópicos estruturais do PHP:
- Trabalhando com Datas: Como usar a função date() e time() no PHP
- Entendendo o php.ini: Como aumentar o tempo de execução e limite de memória
- Documentação Oficial da função sleep()
