Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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;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.
Obrigado a todos por responderem.
@Thiago: Como assim não redireciona visivelmente? A URL não vai ser alterada? Isso é por causa do exit?
É, 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
À 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.
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 :)
#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..)
exemplos