2009-07-14 17 views
4

URLが到達可能か有効かどうかを返す関数を作成する必要があります。PHPにURLが存在するかどうかを判断する最速の方法は何ですか?

私は現在、有効なURLを決定するには、次のようなものを使用しています:

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

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

速く何か、ちょうどページヘッダか何かをフェッチ多分何かが存在することになるように思え。

答えて

7

あなたはhttp status codeをチェックすることができます。

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

何らかのHTTP要求を送信することに限定されます。次に、HTTPステータスコードをチェックすることができます。

すべてのコンテンツを取り戻さない「HEAD」リクエストのみを送信してください。十分に軽くて十分なはずです。

11

次のようにカールを使用することができます:

$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); 
+2

2xxと3xxは、301 Moved PermanentまたはURLを意味する別のhttpコードになる可能性があるため、チェックしてください。 –

関連する問題