我正在尝试测试用php5输入的网址的有效性。我想过使用正则表达式,但假设它一直正常工作,它只解决了url在语法上有效的问题。它没有告诉我任何有关网址正确或有效的信息。
如果可能的话,我正在尝试找到另外两种解决方案。或者为此找到2个独立的解决方案更好?
如果要使用正则表达式,那么为网址存在测试正则表达式的内容吗?
答案 0 :(得分:11)
我只是使用filter_var()
,然后尝试使用cURL ping网址,而不是在正则表达式(URL 非常复杂)上崩溃,而不是p>
if (filter_var($url, FILTER_VALIDATE_URL) !== false)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status_code >= 200 && $status_code < 400)
{
echo 'URL is valid!';
}
}
答案 1 :(得分:3)
进行验证 http://www.php.net/manual/en/filter.filters.validate.php
检查它是否存在......你需要尝试实际访问它。
答案 2 :(得分:2)
为了测试网址是“正确还是正常”,您需要实际尝试与其进行互动(例如,网络浏览器)。
我建议使用Perl的HTTP库,例如LWP::Simple。
答案 3 :(得分:2)
RegExLib是Reg Ex表达式的好地方
答案 4 :(得分:1)
我会做什么:
filer_var
FILTER_VALIDATE_URL
检查网址是否有效。file_get_contents
,并检查$http_response_header[0]
是否包含200
HTTP resoponse。现在,这很脏,确定有一些更优雅的版本使用curl和东西。
答案 5 :(得分:1)
file_exists()
manual page上有一堆'检查外部文件存在'功能。
答案 6 :(得分:1)
我会用正则表达式来解决这个问题,我讨厌正则表达式。然而,这个工具让我的生活变得更加轻松......看看&gt;&gt; http://gskinner.com/RegExr/
答案 7 :(得分:1)
Ping一个URL以查看它是否是有效的URL是无稽之谈!
如果您真的想进行“实时”测试,最好尝试使用DSN解析网址。 DNS比PING或HTTP更可靠。
<?php
$ip = gethostbyname('www.example.com');
echo $ip;
?>
但即使失败,网址也可能有效。它只是没有DNS条目。所以这取决于你的需求。