Проверьте, существует ли удаленная страница с помощью PHP?

В PHP, как я могу определить, существует ли какой-либо удаленный файл (доступ через HTTP)?

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); //follow up to 10 redirections - avoids loops $data = curl_exec($ch); curl_close($ch); if (!$data) { echo "Domain could not be found"; } else { preg_match_all("/HTTP\/1\.[1|0]\s(\d{3})/",$data,$matches); $code = end($matches[1]); if ($code == 200) { echo "Page Found"; } elseif ($code == 404) { echo "Page Not Found"; } } 

Модифицированная версия кода отсюда .

Мне нравится завиток или fsockopen для решения этой проблемы. Любой из них может предоставить данные заголовка о статусе запрошенного файла. В частности, вы будете искать ответ 404 (файл не найден). Вот пример, который я использовал с fsockopen:

http://www.php.net/manual/en/function.fsockopen.php#39948

Эта функция вернет код ответа (последний в случае перенаправления) или false в случае dns или другой ошибки. Если задан один аргумент (URL), делается запрос HEAD. Если задан второй аргумент, выполняется полный запрос, и содержимое, если оно есть, сохраняется в качестве ссылки в переменной, переданной в качестве второго аргумента.

 function url_response_code($url, & $contents = null) { $context = null; if (func_num_args() == 1) { $context = stream_context_create(array('http' => array('method' => 'HEAD'))); } $contents = @file_get_contents($url, null, $context); $code = false; if (isset($http_response_header)) { foreach ($http_response_header as $header) { if (strpos($header, 'HTTP/') === 0) { list(, $code) = explode(' ', $header); } } } return $code; } 

Недавно я искал ту же информацию. Нашел действительно хороший код здесь: http://php.assistprogramming.com/check-website-status-using-php-and-curl-library.html

  function Visit($url){ $agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL,$url ); curl_setopt($ch, CURLOPT_USERAGENT, $agent); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch,CURLOPT_VERBOSE,false); curl_setopt($ch, CURLOPT_TIMEOUT, 5); $page=curl_exec($ch); //echo curl_error($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if($httpcode >= 200 && $httpcode < 300){ return true; } else { return false; } } if(Visit("http://www.site.com")){ echo "Website OK"; } else{ echo "Website DOWN"; } 

Используйте Curl и проверьте, прошел ли запрос успешно. http://w-shadow.com/blog/2007/08/02/how-to-check-if-page-exists-with-curl/

Просто обратите внимание, что эти решения не будут работать на сайте, который не даст соответствующего ответа на страницу, которая не найдена. например, у меня просто возникла проблема с тестированием страницы на сайте, поскольку она просто загружает главную страницу сайта, когда она получает запрос, с которым он не может справиться. Таким образом, сайт почти всегда даст ответ 200 даже для несуществующих страниц.

Некоторые сайты выдают пользовательскую ошибку на стандартной странице и еще не дают заголовок 404.

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