Можно ли отслеживать коды ответа сервера (коды состояния http) из PHP и как это сделать?

Коды ответа сервера/коды состояния http (101, 200, 404 и т. д.) следует отправлять в заголовках при каждом взаимодействии между пользователем и сервером. Как можно отслеживать коды из PHP, чтобы, если код ошибки был отправлен, его можно было связать с действиями пользователя, зарегистрированными веб-приложением, и отреагировать соответствующим образом, скажем, заблокировав или перенаправив пользователя, получающего повторяющийся 403 (запрещено) коды, пытаясь получить доступ к вещам на сервере, которых не должно быть?


person TheEnvironmentalist    schedule 17.06.2013    source источник
comment
access_log? Я предполагаю, что вы можете изменить файл php.ini и добавить auto_append_file = mylog.php, после чего вы сможете сохранить найденные коды ответов.   -  person Dave Chen    schedule 17.06.2013
comment
Акцент был сделан на немедленном ответе сервера, частично как методе обнаружения вторжений. В идеале он также должен связать ошибку с IP-адресом.   -  person TheEnvironmentalist    schedule 17.06.2013


Ответы (2)


Проверить http_response_code:

* Если вы не передадите никаких параметров, то http_response_code получит текущий код состояния. Если вы передадите параметр, он установит код ответа.*

http://php.net/manual/en/function.http-response-code.php

person acasla    schedule 17.06.2013

В основном никак, так как заголовки отправляются веб-сервером до, когда файл PHP анализируется и генерируется «настоящий» вывод. Вы можете использовать метод http_response_code(), но учтите следующее: если вы хотите получить доступ к папке, для которой у вашего www-data нет прав на чтение, вы получите 403 Forbidden. Это сообщение веб-сервера, PHP даже не трогается (потому что для веб-сервера он даже не существует).

Единственный способ перехватить эти события, если вы специально используете собственный ErrorDocument это ваша конфигурация или если коды ответов отправляются файлом PHP:

if ( !$something )
    header("HTTP/1.1 403 Forbidden");
person Whisperity    schedule 17.06.2013