2009-07-14 12 views
4

Ich muss eine Funktion erstellen, die zurückkehrt, wenn eine URL erreichbar oder gültig ist.Wie kann am schnellsten festgestellt werden, ob eine URL in PHP existiert?

Ich bin derzeit so etwas wie die eine gültige URL zu bestimmen, folgende:

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

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

Es scheint, wie es schneller wäre etwas, vielleicht etwas, das den Seitenkopf oder etwas gerade geholt.

Antwort

7

könnten Sie http status code überprüfen.

Hier ist ein Code, mit dem Sie überprüfen können, ob eine URL 2xx oder 3xx http-Code zurückgibt, um sicherzustellen, dass die URL funktioniert.

<?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"; 
?> 

Hoffe, das hilft!

5

Sie werden wahrscheinlich nur eine Art HTTP-Anfrage senden. Dann können Sie HTTP-Statuscodes prüfen.

Achten Sie darauf, nur eine "HEAD" -Anfrage zu senden, die nicht den gesamten Inhalt zurückzieht. Das sollte ausreichend und leicht genug sein.

11

können Sie curl wie folgt verwenden:

$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

Überprüfen Sie auch auf 2xx und 3xx, weil es könnte 301 Moved Permanently oder ein anderer http-Code, der die URL funktioniert bedeutet. –

Verwandte Themen