2010-05-03 12 views
34

Dawny programista napisał lub api klienta-serwera w PHP. Po prostu wysyła wiadomości w formacie xml za pomocą post/response w bardzo uproszczony sposób. Problemem jest to, że nawet gdy wystąpi błąd (np nieprawidłowe argumenty przekazywane na stronie serwera) otrzymujemy odpowiedzi HTTP 200 ze strony jak tenJak sprawić, by strona php zwróciła błąd 503 (lub cokolwiek innego niż 200)

<h4>Unknown error!</h4> 

w Firebug widzę, że rzeczywiście HTTP odpowiedź jest a 200. Jak możemy wysłać inną odpowiedź (np.: 503), gdy programowo wykryjemy w naszym kodzie php, że jest to odpowiednie.

Odpowiedz

71

Użyj funkcji PHP header, aby wysłać kod (wraz z wersją HTTP i innymi nagłówkami, których potrzebujesz). Pełniejsze informacje:

When to send HTTP status code?

http://php.net/manual/en/function.header.php

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

header('HTTP/1.1 503 Service Temporarily Unavailable'); 
header('Status: 503 Service Temporarily Unavailable'); 
header('Retry-After: 300');//300 seconds 
+7

Dlaczego trudno zakodować kodowanie HTTP/1.1? Co się stanie, jeśli klient używa protokołu HTTP 1.0? – Pacerier

+0

@Pacerier, więc co byś zrobił? Jak to napisać, aby obejmowała zarówno HTTP 1.0, jak i HTTP 1.1? Wszystkie przykłady pokazują to jako podane w odpowiedzi – Inigo

+1

Chyba "header ($ _ SERVER [" SERVER_PROTOCOL "]. '503 Usługa tymczasowo niedostępna"); '? – Inigo

2

Na początku skryptu (lub naprawdę, zanim jakiekolwiek dane zostaną wysłane jako odpowiedź):

<?php header("HTTP/1.0 404 Not Found"); lub inny HTTP status code.

+4

ta opiera się na zdolności PHP mapowania kodu stanu z rodzaju nagłówka (manipulacyjną specjalnym etui) - to naprawdę powinno być header ("HTTP/1.0 404 Not Found", true, 404) – symcbean

+0

@symcbean Nicea , Nigdy tego nie zauważyłem. Dzięki! – chelmertz

3

Pracowałem na stronie, która została zhackowana i musiałem użyć HTACCESS, aby to zrobić.

<IfModule mod_rewrite.c> 

RewriteEngine on 

# let this (iescaped) IP address see the real site: 
# RewriteCond %{REMOTE_ADDR} !^123.45.67.89 

RewriteCond %{REQUEST_URI} !/maintenance.php$ [NC] 

RewriteCond %{REQUEST_URI} !.(jpe?g?|png|gif|css|js) [NC] 

RewriteRule .* /maintenance.php [R=503,L] 

</IfModule> 
Powiązane problemy