确定URL是否存在于PHP中的最快方法是什么? [英] What is the fastest way to determine if a URL exists in PHP?

查看:68
本文介绍了确定URL是否存在于PHP中的最快方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要创建一个函数,该函数在URL可达或有效时返回.

I need to create a function that returns if a URL is reachable or valid.

我目前正在使用类似以下的方法来确定有效的网址:

I am currently using something like the following to determine a valid url:

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

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

似乎会有更快的速度,也许只是获取页面标题的速度.

It seems like there would be something faster, maybe something that just fetched the page header or something.

推荐答案

您可以检查 http状态代码.

这是您可以用来检查网址是否返回2xx或3xx http代码的代码,以确保该网址正常工作.

Here is a code you could use to check that an url returns 2xx or 3xx http code to ensure the url works.

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

希望这会有所帮助!

这篇关于确定URL是否存在于PHP中的最快方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆