Bir URL PHP içinde olup olmadığını belirlemek için en hızlı yolu nedir?

3 Cevap php

Ben bir URL ulaşılabilir veya geçerli olup olmadığını döndüren bir işlev oluşturmanız gerekir.

Şu anda geçerli bir url belirlemek için aşağıdaki gibi bir şey kullanıyorum:

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

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

Daha hızlı bir şey, sadece sayfa başlığını falan getirilen belki bir şey olacak gibi görünüyor.

3 Cevap

Kontrol edebilir http status code.

Burada bir url url çalışmalarını sağlamak için 2xx veya 3xx http kodu döndürür denetlemek için kullanabileceğiniz bir koddur.

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

Bu yardımcı olur umarım!

Aşağıdaki gibi kıvırmak kullanabilirsiniz:

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

Büyük olasılıkla HTTP isteği çeşit gönderme ile sınırlı olacak. Sonra HTTP durum kodlarını kontrol edebilirsiniz.

Tüm içerik geri çekmek değil, sadece bir "HEAD" isteği göndermek için emin olun. Yeterli ve yeterince hafif olmalı.