Какой самый быстрый способ определить, существует ли URL в PHP? - PullRequest
4 голосов
/ 14 июля 2009

Мне нужно создать функцию, которая возвращает, если URL доступен или действителен.

В настоящее время я использую что-то вроде следующего, чтобы определить действительный URL:

static public function urlExists($url)
{
    $fp = @fopen($url, 'r');

    if($fp)
    {
        return true;
    }
    return false;
}

Кажется, что-то будет быстрее, может быть, что-то, что только что загрузило заголовок страницы или что-то в этом роде.

Ответы [ 3 ]

11 голосов
/ 14 июля 2009

Вы можете использовать curl следующим образом:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true); // set to HEAD request
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // don't output the response
curl_exec($ch);
$valid = curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200;
curl_close($ch);
8 голосов
/ 14 июля 2009

Вы можете проверить http код статуса .

Вот код, который вы можете использовать, чтобы убедиться, что URL возвращает 2xx или 3xx http-код, чтобы убедиться, что URL работает.

<?php

$url = "http://stackoverflow.com/questions/1122845";

function urlOK($url)
{

    $url_data = parse_url ($url);
    if (!$url_data) return FALSE;

   $errno="";
   $errstr="";
   $fp=0;

   $fp=fsockopen($url_data['host'],80,$errno,$errstr,30);

   if($fp===0) return FALSE;
   $path ='';
   if  (isset( $url_data['path'])) $path .=  $url_data['path'];
   if  (isset( $url_data['query'])) $path .=  '?' .$url_data['query'];

   $out="GET /$path HTTP/1.1\r\n";
   $out.="Host: {$url_data['host']}\r\n";
   $out.="Connection: Close\r\n\r\n";

   fwrite($fp,$out);
   $content=fgets($fp);
   $code=trim(substr($content,9,4)); //get http code
   fclose($fp);
   // if http code is 2xx or 3xx url should work
   return  ($code[0] == 2 || $code[0] == 3) ? TRUE : FALSE;
}

echo $url;
if (urlOK($url)) echo " is a working URL";
    else echo " is a bad URL";
?>

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

5 голосов
/ 14 июля 2009

Скорее всего, вы будете ограничены отправкой какого-либо HTTP-запроса. Затем вы можете проверить коды состояния HTTP.

Обязательно отправляйте только запрос "HEAD", который не возвращает весь контент. Этого должно быть достаточно и достаточно легко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...