URL是否有效

19

可能是重复问题:
在PHP中检查URL是否存在的最佳方法是什么?`

我正在寻找一个函数,在php中返回TRUEFALSE,无论URL是否有效。

isValidURL($url); 我认为这很简单... 它将考虑所有可能的URL。

通过有效,我希望它指的是网页或其他类型文件的现有页面。 它只应该存在。


2
有效意味着什么?语法上有效?还是引用了现有的资源? - Gumbo
@Gordon:这取决于James对有效性的定义。 - Gumbo
1
可能重复的内容:http://stackoverflow.com/search?q=check+if+url+exists+php请检查以上链接是否存在重复内容。 - Gordon
谢谢大家,抱歉给你们带来了麻烦。你们仍然帮了我很多。 - james
这可能是一个重复问题,但它不是与之链接的重复问题。这个问题询问“有效”的URL,而那个问题询问“可用”的URL。完全有可能一个有效的URL是不可用的。 - ftrotter
显示剩余2条评论
2个回答

60
<?php

$url = "http://stack*overflow.org";


if(filter_var($url, FILTER_VALIDATE_URL) === FALSE)
{
        echo "Not valid";
}else{
        echo "VALID";
}
?>

这虽然没有检查 tlds,但是。


1
@Nemoden: 我知道这不是。但我在我的帖子中已经说过了... - genesis
8
@Nemoden问:stackoverflow.invalid有什么问题?您可以设置自己的本地DNS来处理各种顶级域名。我将*.lan指向防火墙后面的几个本地开发站点。 ;) 答:stackoverflow.invalid是无效的域名,没有任何问题。您可以设置本地DNS来处理各种顶级域名,并将*.lan指向防火墙后面的本地开发站点。 ;) - Dustin Graham
注意:这也将允许没有任何扩展名的 http://stackoverflow - PaulSkinner
3
http://stackoverflow也是一个有效的URL,扩展名对于有效的URL并不是必需的,localhost也是一个有效的URL。 - Shahrokhian
我想使用这个方法是个好主意,然后再使用get_headers()进行更可靠但较慢的检查。 - Tomáš Zato
显示剩余4条评论

2
您可以使用parse_url函数来检查URL是否有效,如果URL无效,则会返回false,否则返回一个array。请保留HTML标签。
function isValidURL($url) { return (bool)parse_url($url); }

相当容易的方式,是吧? :)

这不是可靠的:http://sandbox.phpcode.eu/g/a4192.php - genesis
2
那么 preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url); 也不是很可靠。但我有自己的理由不关心域名区域:他们明天会注册更多的域名区域,我将不得不在所有项目中手动添加它们?为了检查URL是否真的存在,我将使用cURL或sockets。对于快速检查,这些函数对我来说已经足够了。我只是向OP提供一个我自己使用的方法。而且它比 regex 更干净,这就是我喜欢它的原因;-) - Nemoden
不可靠?架构是好的,您应该使用gethostbyname检查名称是否存在: function isValidURL($url) { $parts = parse_url($url); if((bool)$parts) { return ($parts['host'] != gethostbyname($parts['host']));} else return false; } - Daniele Cruciani
2
文档明确表示:“此函数不旨在验证给定的URL”... - Kloar
是的,+1 它并不真正起作用... - Gabriel Queiroz Silva
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接