Ir para conteúdo

POWERED BY:

Arquivado

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

Tiago Souza Ribeiro

Gerar erros 404, 503, etc... por PHP

Recommended Posts

Olá.

 

 

Em algumas situações preciso que um erro HTTP seja "disparado" manualmente, forçado...

Ex: uma pequena função verifica se o website está em modo de manutenção por meio de um campo no banco de dados. Se estiver, preciso que um erro 503 seja "disparado", e a página de erro 503 configurada no servidor web seja exibida, sem usar redirecionamento.

Um include não resolveria aqui, pois quero um método que use a página de erro configurada no servidor.

 

Há alguma forma de fazer isso?

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi, você está usando a diretiva ErrorDocument (Apache) com algumas páginas de erro personalizadas:

 

Ex.:

ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php

 

Se você definir um status-code usando header, o PHP não irá chamar o Apache para que ele chame a página correspondente ao status-code dado, apenas substituirá o status-code que seria enviado pelo status-code dado.

 

Creio que a melhor solução para o seu problema é enviar um cabeçalho 'Location' para o navegador com o valor da página de error que você quer, assim o usuário é redirecionado para ela.

header("Location: http://www.site-exemplo.com/error/404.php");
exit;

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele quer sem redirecionamento..

 

basta setar o header e fazer um include para a página do servidor

 

exemplo:

header('HTTP/1.0 404 Not Found');include '/error/404.html';

A forma correta é a explicada pelo mangakah, ela não redireciona "visivelmente" a página.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, mas com o .htaccess ele redireciona e não muda apenas a página. Tem esse porém. Agora como config. padrão, se você colocar uma página com o erro mais ponto .shtml já lê como erro e adiciona aquele conteúdo na página.

Poderia existir .sphp né, kkkkk. :grin:

Mas a solução é como mangakah falou, vai no .htaccess ou no httpd do Apache e coloca:

ErrorDocument #Erro #Página

Compartilhar este post


Link para o post
Compartilhar em outros sites

À dica do hinom eu sómudaria o 1.0 para 1.1 haja vista que, apesar de ainda existirem servidores desatualizados, a maioria já usa a versão mais recente do protocolo HTTP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que vou usar include junto com esses headers de erros HTTP. Quero que seja de uma forma que a URL acessada permaneça a mesma, como se o próprio Apache tivesse enviado a página de erro.

 

Obrigado a todos que responderam :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

#5, há um redireconamento.

 

Faça um teste simples usando o PHP CURL.

Retornará o HTTP Status 200 e será redirecionado.

Para permitir o redirecionamento, configure as opções do CURL para permitir a quantidade desejada. (CURLOPT_MAXREDIRS = 1)

http://php.net/curl_setopt_array

O status 404 só retornará na página seguinte.

 

 

#7

O parâmetro do Apache, ErrorDocument, terá efeito somente se houver um erro.

No post #1 está descrito que o status HTTP deve ser algo dinâmico, independente do real status HTTP.

Ou seja, mesmo sendo uma página válida (200), o intuito é controlar o status do cabeçalho HTTP (503, 401, 404, etc..)

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.