PHP: Как прочитать код состояния HTTP веб-страницы

? PHP

Как можно получить удаленный доступ через сценарий к страницам сайта, узнать, существует ли страница, является ли она перенаправлением, нарушена ли ссылка? Эта проблема крайне важна при написании сценария для Сети.

Вот функция, определенная для получения этого кода состояния на основе PHP-функции fsockopen, совместимой с текущими версиями PHP. Предусмотрен скрипт, показывающий его использование, отвечающий строгим правилам.

Использовать fsockopen

Используется функция с двумя параметрами:
- URL-адрес сайта без имени файла, например: www.iqlevsha.ru.
- имя файла, возможно, с каталогом.

При вызове функции домен переводится в параметр.

$server = "www.example.com"
$fp=fsockopen($server,80,$errno,$errstr,30);

Без добавления протокола функция использует TCP по умолчанию. Можно указать tcp ://www.scribtol.ru или udp ://www.scartol.fr.

Второй параметр - порт, обычно 80, следующие два используются для получения номера и сообщения о возможной ошибке. Последнее - максимальное время ожидания, предоставляемое для получения ответа, в миллисекундах.

После открытия соединения выполняется запрос. Речь в нашем случае идет о доступе к файлу, отсюда и команда GET:

$page = "index.php"
$out="GET /$page HTTP/1.1\r\n"; 
$out.="Host: $server\r\n"; 
$out.="Connection: Close\r\n\r\n";
fwrite($fp,$out);

Указываем страницу, сервер и закрываем соединение. Но файл получается так же, как и HTTP-заголовки.

Для восстановления этих данных используется функция fgets:

$content=fgets($fp);

Получается линия формы:

HTTP/1.1 200 Ok

если файл найден. Если URL является перенаправлением, это будет:

HTTP/1.1 301 Moved Permanently

В то время как код 404 указывает, что страница не существует.

Остается только извлечь код с функцией substr, как это сделано в данном сценарии ниже.

Исходный код

Исходный код сценария был протестирован на этом сайте. Заменить «www.iqlevsha.ru» URL-адресом сайта (без/в конце или имени файла, но дополнительно с протоколом tcp ://).
Таким же образом замените имена страниц на страницы сайта с каталогом или без него.

См. также