我正在尝试编写一些可以检查网址是否存在并且正在运行的php。我遇到了一个问题,这是我的代码:
if(!filter_var($url, FILTER_VALIDATE_URL) === false)
{
//Trouve l'host
$hostname=parse_url($url, PHP_URL_HOST);
//Tente de trouver l'adresse IP de l'host
if (gethostbyname($hostname) !== $hostname)
{
//Cherche les données de l'entête
$headers=get_headers($url);
//Tente de trouver une erreur 404
if(!strpos($headers[0], '404'))
{
return;
}
}
}
第一行应该检查我的url是否至少有效并且我的其余代码正确检查主机是否存在以及该链接没有给我一个错误404,但它认为我的地址是O.K.如果我写的话:
(绝对任意)://www.google.com
为什么?
答案 0 :(得分:3)
您的代码是正确的,尽管它很难阅读。相反,阅读下面的代码要容易得多:
filter_var
问题是http://
似乎接受任何协议。根据{{3}}页面:
请注意,有效的URL可能未指定HTTP协议
ssh://
,因此可能需要进一步验证以确定URL使用预期协议,例如mailto:
或filter_var
。
例如,请参阅Validate filters。
您最好的选择是为MyPopup.CustomPopupPlacementCallback = popupFixCentered;
补充可接受协议的附加测试,或使用正则表达式来验证您的网址。