Как заставить php-страницу возвращать ошибку 503 (или что-то не-200)

Бывший разработчик написал или клиент-сервер api в PHP. Он просто отправляет сообщения как xml, используя пост / ответ очень упрощенным способом. Проблема в том, что даже при наличии ошибки (например: неверные аргументы, переданные на сервер) мы получаем ответ HTTP 200 со страницей, подобной этой

<h4>Unknown error!</h4> 

В firebug я вижу, что фактический HTTP-ответ – 200. Как мы можем отправить другой ответ (то есть: 503), когда мы программно обнаруживаем в нашем php-коде, что это целесообразно.

Используйте функцию header PHP для отправки кода (вместе с версией HTTP и любыми другими заголовками, которые вам нужны). Дополнительная информация:

Когда отправлять код статуса HTTP?

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 

Я работал над сайтом, который был взломан, и ему пришлось использовать HTACCESS для этого.

 <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> 

В дополнение к вашему сценарию (или действительно, прежде чем какой-либо вывод будет отправлен как ответ):

<?php header("HTTP/1.0 404 Not Found"); или любой другой код состояния HTTP .

Хороший класс для достижения этого можно найти здесь: http://www.krisjordan.com/php-class-for-http-response-status-codes/ – используйте его так (перед любым другим выходом):

 <?php header(StatusCodes::httpHeaderFor(503)); ?>