检查URI是否存在?

时间:2010-03-12 15:33:20

标签: php

如何检查PHP是否存在URI?

我想它会返回一个错误代码,我可以在使用file_get_contents之前检查它,因为如果我在一个不存在的链接上使用file_get_contents,它会给我一个错误。< / p>

5 个答案:

答案 0 :(得分:4)

您可以向uri / url发送CURL请求。根据协议,您可以检查结果。对于HTTP,您应该检查HTTP状态代码404。检查the curl manual on php.net。在某些情况下,您可以使用file_exists()功能。

<?php
$curl = curl_init('http://www.example.com/');
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_exec($curl);
$info = curl_getinfo($curl);
echo $info['http_code']; // gives 200
curl_close($curl);

$curl = curl_init('http://www.example.com/notfound');
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_exec($curl);
$info = curl_getinfo($curl);
echo $info['http_code']; // gives 404
curl_close($curl);

答案 1 :(得分:3)

尝试类似:

if ($_REQUEST[url] != "") {
    $result = 1;
    if (! ereg("^https?://",$_REQUEST[url])) {
        $status = "This demo requires a fully qualified http:// URL";
    } else {
        if (@fopen($_REQUEST[url],"r")) {
            $status = "This URL s readable";
        } else {
            $status = "This URL is not readable";
        }
    }
} else {
    $result = 0;
    $status = "no URL entered (yet)";
}

然后您可以使用以下方法调用此函数:

if ($result != 0) {
    print "Checking URL <b>".htmlspecialchars($_REQUEST[url])."</b><br />";
}
print "$status";

答案 2 :(得分:2)

尝试函数array get_headers($url, [, int $format = 0 ]),它应该在失败时返回false - 否则,您可以假设uri存在,因为Web服务器为您提供了头信息。

我希望该函数使用HTTP HEAD请求而不是GET,与上述fopen解决方案相比,这会产生更少的流量。

答案 3 :(得分:2)

try {
    $fp = @fsockopen($url, 80);
    if (false === $fp) throw new Exception('URI does not exist');
    fclose($fp); 
    // do stuff you want to do it the URI exists
} catch (Exception $e) {
    echo $e->getMessage();
}

答案 4 :(得分:1)

checkdnsrr()执行DNS查找。可能有用。