Ir para conteúdo / Skip to content

Como mostrar ao usuário que seu site está em manutenção

Postado em: 6 de setembro de 2007 por Pedro Rogério

Por diversas vezes já tive que efetuar manutenção em sites, e quem faz isso frequentemente sabe que pode ocorrer vários problemas, um deles é de o site ficar todo desconfigurado no momento em que você está alí efetuando alterações. Mas que tal seria se pudesse-mos colocar uma mensagem de que o site está em manutenção no momento e logo voltará ao ar para evitar esse tipo de problema? Com PHP achei uma maneira bem simples de fazer isso. Observem o seguinte script:


<?php
$manutencao = 1;
$ip = '200.16.20.82';

if ( $manutencao )
{
    if ( $_SERVER['REMOTE_ADDR'] != $ip )
       die('Site em manutenção, voltaremos em instantes');
}
?>

Onde foi citado $ip = ‘200.16.20.82′; é onde você deve colocar seu IP, com isso, só você terá acesso ao conteúdo do site e, para os demais usuários aparecerá a mensagem de que o site está em manutenção. Caso queira voltar o site ao normal é só alterar aqui $manutencao = 1; para 0, ficaria assim: $manutencao = 0;. Pronto, tudo volta ao normal.

<update 17/09/2007>

Caso você queira liberar o acesso para mais IPs, deve utilizar o seguinte código:


<?php
$manutencao = 1;
$ip = array('200.16.20.82', '200.16.20.83');

if ( $manutencao ){
	$verificador = 0;
	for($i = 0; $i < sizeof($ip); $i++){
		if($_SERVER['REMOTE_ADDR'] == $ip[$i]) $verificador++;
	}
	if($verificador == 0) die('Site em manutenção, voltaremos em instantes');
}
?>

Basta você ir colocando os IPs na 3ª linha, separados por vírgula. O código acima é de autoria de meu amigo aqui da empresa, o Márcio, portanto, todos os créditos a ele.

</update>

<update 20/09/2007>

Nosso amigo DGMike postou aqui no blog uma solução bem mais enxuta, então, fica abaixo a dica:


<?php
$manutencao = true;
$ip=$_SERVER['REMOTE_ADDR'];
$ips = array('200.16.20.82', '200.16.20.83');
if ( ($manutencao) && (!in_array ($ip, $ips)) ) {
    die ('Site em manutenção, voltaremos em instantes');
}
?>

</update>

Se tiver um tempo, leiam também:

Sobre Pedro Rogério

Pedro Rogério é desenvolvedor web por paixão, não saberia fazer melhor outra coisa. Além de escrever para o Pinceladas da Web é proprietário do blog CSS no Lanche, blog voltado ao desenvolvimento front-end.

Deixe seu comentário

22 comentários para esse post

  1. Newton Calegari disse:
    #1

    Opa! Muito útil esse aí Pedro! Vou usar semana que vem, tenho que modificar umas coisas num site, e vou experimentar isso aí.

    Att
    Abraços!

  2. Rafael Dourado disse:
    #3

    Boooa dica!

  3. Allyson Barros disse:
    #4

    Uma dica muito boa que sem duvidas irá ajudar muitos webmasters!!!! Parabéns pela iniciativa…

  4. Leonardo Priori disse:
    #5

    deve dar para fazer algo assim via htaccess
    com a vantagem de ser uma solução mais portavel
    pois independe de como se lida com seus includes ou mesmo de qual linguagem se usa

  5. GataPlus.net disse:
    #7

    Tem que criar uma página e colocar esse código.. Não entendi bem o funcionamento desse sistema..

  6. Pedro Rogério disse:
    #8

    @Gata,

    Se você utiliza PHP, é só colocar esse código no index.php que já funciona!!!

  7. Leonardo L Procópio disse:
    #9

    show de bola brother!
    Grande abraço!

  8. Lucas Motta disse:
    #10

    Olá!
    Valeu o toque.. Comecei a acompanhar seu blog a pouco tempo, pelo interesse em CSS.
    E até agora acho um dos melhores feitos sobre. Dá várias dicas, curiosidades de forma simples, sucinta.. Tá de parabéns! :D

    Mas assim, neste código, tem como eu colocar mais de um IP para poder ver a página em manutenção? Pois as vezes utilizo mais de um PC para fazer um website..

    Grande abraço!

  9. Pedro Rogério disse:
    #11

    @ Lucas,

    Respondi a sua dúvida no post, adicionei mais um código que faz o que você quer!! Abraços e obrigado pelos elogios.

  10. DGmike disse:
    #12

    Para programadores mais experientes o último código poderia ser escito desta maneira…

    Explico… primeiro, guardamos o ip em uma variável para nosso código ficar mais limpo, depois verificamos se este array existe com a fuunção in_array (verifique a documentação para mais detalhes em http://www.php.net ), mas como queremos que o ip não esteja nesta lista, usamos uma exclamação (!) antes desta verificação.
    É a mesma coisa, só que com um código mais enxuto, mais limpo, sem for ou loops…
    Recomendo para quem está começando ter curiosidadee de ver a documentação do PHP, ela não é dificil de entender como muitas documentações por aí.
    e, Pedro, parabéns pela iniciativa. :)

  11. DGmike disse:
    #13

    Para programadores mais experientes o último código poderia ser escito desta maneira…
    < ?php
    $manutencao = true;
    $ip=$_SERVER['REMOTE_ADDR'];
    $ips = array(’200.16.20.82′, ‘200.16.20.83′);
    if ( ($manutencao) && (!in_array ($ip, $ips)) ) {
    die (’Site em manutenção, voltaremos em instantes’);
    }
    ? >

    Explico… primeiro, guardamos o ip em uma variável para nosso código ficar mais limpo, depois verificamos se este array existe com a fuunção in_array (verifique a documentação para mais detalhes em http://www.php.net ), mas como queremos que o ip não esteja nesta lista, usamos uma exclamação (!) antes desta verificação.
    É a mesma coisa, só que com um código mais enxuto, mais limpo, sem for ou loops…
    Recomendo para quem está começando ter curiosidadee de ver a documentação do PHP, ela não é dificil de entender como muitas documentações por aí.
    e, Pedro, parabéns pela iniciativa. :)

  12. Nescau disse:
    #14

    Caralho!!!!!!!!!!!!!!! Essa é para o DGmike!!!

    Meo você salvou a minha vida, eu que escrevi o primeiro código, porém nem conhecia a função in_array()… Cara sempre usei um for para resolver problemas desse tipo, porém com essa função é muito mais foda!!!!

    Valeu pelo toque…

    É isso ai Pedro, seu blog é o melhor!!!!!!!!!!!!!!!!!

    Falou!!!

  13. Anderson Custódio disse:
    #15

    Eu faço esse mesmo esquema, mas pra ficar uma coisa mais personalizada faço uma página em html separada. Por ex:

    if(true)
    {
    require(’em_manutencao.html’);
    exit;
    }

  14. Assunção Júnior disse:
    #16

    Legal a dica, mas as vezes você está em computador que usa IP Dinâmico, e ai? Para resolver esse problema usei uma sessão. Claro que no meu caso eu tenho uma página de login…

  15. Tiago disse:
    #17

    Se desejar bloquear temporariamente o acesso de TODOS os arquivos de uma pasta para fazer a atualização use htaccess dessa maneira:

    Redirect /pasta/ http://site.com.br/manutencao/manutencao.html

    crie uma pasta manutenção e dentro um arquivo manutencao.html contendo o texto de aviso…

    Ou para bloquear acesso a index, faça assim:

    Redirect /index.php http://site.com.br/manutencao/manutencao.html

    Abraços…

  16. www.acquamovel.com.br disse:
    #18

    …..Eu jairo antonio Batista…..registrei dominio mensionado acima….mas gostaria de montar uma pagina para este dominio mensionado…..Tal pagina é relativo a trabalho profissional……Quero mostrar o meu trabalho via internet,mas não sei como montar um site……estou precisando de mecanismo para tal….caso alguém ,ou empresa,,possa fazer isto,estou disposto a pagar pelo trabalho……veja o que faço na pagina do orkut….em…aquamovel……veja as fotos e netenderá o que preciso…… agradecimentos carinhosamente……….

  17. Marcelo disse:
    #19

    Muito boa essas dicas, eu costumo usar o .htaccess, somente descomento as duas linhas abaixo e adiciono meu ip.

    #RewriteCond %{REMOTE_HOST} !^111\.222\.333\.444$
    #RewriteRule (.*) admin/manutencao.php [L]

    É bom adicionar um status “503 Service Unavailable” na página manutencao.php para evitar do googlebot indexar o site com o conteúdo da página de manutenção.

  18. Arthur disse:
    #20

    Olá!
    Eu criei um jogo esses dias,
    e estou com vários membros no meu site.

    Isso é muito bom, claro, mas, quando eu faço algumas manutenções,
    o site fica todo desconfigurado.

    Tentei fazer a dica no index.htm e não consegui. :/
    Botei este code no final da página,
    e para o teste, não mudou nada.
    Usuários meus continuam a conseguir visualizar.

    Bom, aguardo respostas.

  19. Edson disse:
    #21

    tem um site queria saber eu mesmofazer manutenção qual é procedimento p/ trasferença de foto e texto.grato

  20. Edson disse:
    #22

    tem um site queria saber eu mesmo fazer manutenção qual é procedimento p/ trasferencia de foto e texto.grato

Deixe seu comentário