Как получить код статуса HTTP для удаленного домена в php?

Я хотел бы создать пакетный скрипт, пройти через 20 000 ссылок в БД и отсеять все 404 и т. Д. Как получить код статуса HTTP для удаленного URL-адреса?

Предпочтительно не использовать завиток, так как я не устанавливаю его.

CURL был бы совершенным, но поскольку у вас его нет, вам придется спуститься и загромождать сокеты. Техника:

  1. Откройте сокет на сервере.
  2. Отправьте запрос HTTP HEAD.
  3. Разберите ответ.

Вот краткий пример:

<?php $url = parse_url('http://www.example.com/index.html'); $host = $url['host']; $port = $url['port']; $path = $url['path']; $query = $url['query']; if(!$port) $port = 80; $request = "HEAD $path?$query HTTP/1.1\r\n" ."Host: $host\r\n" ."Connection: close\r\n" ."\r\n"; $address = gethostbyname($host); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_connect($socket, $address, $port); socket_write($socket, $request, strlen($request)); $response = split(' ', socket_read($socket, 1024)); print "<p>Response: ". $response[1] ."</p>\r\n"; socket_close($socket); ?> 

UPDATE: я добавил несколько строк для анализа URL-адреса

Если IM не ошибается, ни одна из встроенных функций php не возвращает статус http удаленного URL-адреса, поэтому лучшим вариантом будет использование сокетов для открытия соединения с сервером, отправки запроса и анализа состояния ответа:

псевдокод:

 parse url => $host, $port, $path $http_request = "GET $path HTTP/1.0\nHhost: $host\n\n"; $fp = fsockopen($host, $port, $errno, $errstr, $timeout), check for any errors fwrite($fp, $request) while (!feof($fp)) { $headers .= fgets($fp, 4096); $status = <parse $headers > if (<status read>) break; } fclose($fp) 

Другой вариант – использовать уже построенный клиентский класс http-клиента в php, который может возвращать заголовки без получения полного содержимого страницы, должно быть несколько классов с открытым исходным кодом, доступных в сети …

Эта страница выглядит так, как будто она имеет неплохую настройку для загрузки страницы с использованием curl или fsockopen и может получать заголовки HTTP, используя любой метод (который вам действительно нужен).

После использования этого метода вы хотите проверить $ output ['info'] ['http_code'], чтобы получить нужные данные.

Надеюсь, это поможет.

Вы можете использовать функцию HTTP :: head PEAR.
http://pear.php.net/manual/en/package.http.http.head.php

http://www.webmasterworld.com/forum88/12559.htm быстрый бит поисковой системы нашел эту ссылку. Самая современная версия находится внизу.