如何在 PHP 客户端检查网站的 url 是否有效?

问题描述 投票:0回答:4

我已经搜索了SO问题,但发现解决方案是基于调用使用

ping
PHP函数执行的
system
命令。

我的网络主机服务器不允许我这样做。我该怎么办?

注意

我需要从客户端/网络浏览器端进行检查。

php validation url client-side
4个回答
2
投票

由于无法使用ajax加载外部网页来检查页面是否响应,因此可以执行以下操作:

  • 首先使用正则表达式检查 url 字符串是否有效:

javascript:

编辑得更加宽容。由于 javascript 在没有任何第三方库的情况下不支持 unicode 字符匹配,这是我选择的方法:

function Validate(url){ 
    var pattern = /(https?:\/\/)?.+\.[a-z]{2,4}/i 
    return pattern.test(url); 
} 

alert(Validate("http://abcü好le2.com/?query=test&test=1")); //true
alert(Validate("https://hurmårdu.se/blog/?test=1")); //true
alert(Validate("abcü好le2.com/?query=test&test=1")); //true
alert(Validate("hurmårduse/blog/?test=1")); //false
alert(Validate("hurmårduse")); //false

注意:为了使此功能更好,我们可以添加支持,以便在字符串开头添加 http://(如果不包含该字符串)。另外,如果您对 unicode 正则表达式感兴趣:http://xregexp.com/plugins/

  • 如果是,则向您的后端发出ajax请求
  • 后端获取通过 ajax 请求发送的 url,并使用 Flave 为您提供的解决方案加载 url,并返回该 url 是否响应:

php:

$url = $_POST["url"];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);       
curl_close($ch);
if(strlen($output)){
    return json_encode(array("is_valid" => true, "value" => $url));
}else{
    return json_encode(array("is_valid" => false, "value" => $url));
}

注意:代码需要清理 ajax 请求发送的数据。


0
投票

您的主机允许使用curl 或socket() 函数吗?或者也许使用 fopen 命令进行远程包含?这可能是比使用系统(“ping”)命令更好的选择。


0
投票

在 php 中进行简单的检查就是

if(strlen(file_get_contents('http://google.com')){ // do something }

客户端可能很棘手,因为大多数浏览器不允许跨端脚本

或者您可以使用 php-curl(如果已安装)。


0
投票

函数

gethostbyname
checkdnsrr
(该函数未在 Windows 上实现)将检查给定主机名是否对应于 DNS 记录(因此本质上是给定主机名是否是公共的)。它应该比
file_get_contents
curl
更快;-)

© www.soinside.com 2019 - 2024. All rights reserved.