php get_Header是判断站点是否已启动的好方法吗?
我对php还是相当陌生的,你能评论一下下面的代码是否有助于判断一个站点是否正常运行,是否不适合,原因和更好的替代方案吗 提前谢谢php get_Header是判断站点是否已启动的好方法吗?,php,get-headers,Php,Get Headers,我对php还是相当陌生的,你能评论一下下面的代码是否有助于判断一个站点是否正常运行,是否不适合,原因和更好的替代方案吗 提前谢谢 $siteHeader = @get_headers($url , 1); if ($siteHeader > 1) { $siteUp = true; } else { $siteUp = false; } 更新:我越想它,它看起来就越不好看。我已经扩展了我最初的答案,回想起来这是幼稚的 对于基本用法来说,这很好,但是您可能还需要检查HTTP
$siteHeader = @get_headers($url , 1);
if ($siteHeader > 1) {
$siteUp = true;
} else {
$siteUp = false;
}
更新:我越想它,它看起来就越不好看。我已经扩展了我最初的答案,回想起来这是幼稚的 对于基本用法来说,这很好,但是您可能还需要检查HTTP响应代码,而不仅仅是检查是否有响应。现在的代码的方式,只是告诉你,有人在另一边听,这是一个很长的方式从大多数人会认为“网站是”。 下面是如何轻松隔离HTTP响应代码(如果请求失败,则获取
false
):
除此之外,还有重定向的问题:如果你看到重定向,你会怎么做?您查询的服务器可能正常,但重定向到的服务器可能已关闭。如果有人在浏览器中键入URL,他们将被重定向并最终超时,而一步测试将表明一切正常。如果有重定向循环呢?浏览器会检测到这一点并最终超时,但要做到这一点,您需要编写大量代码
因此,最终,cURL看起来确实是唯一可靠的解决方案,因为它透明地完成了所有这一切。更新:我越想它,它看起来就越不精细。我已经扩展了我最初的答案,回想起来这是幼稚的 对于基本用法来说,这很好,但是您可能还需要检查HTTP响应代码,而不仅仅是检查是否有响应。现在的代码的方式,只是告诉你,有人在另一边听,这是一个很长的方式从大多数人会认为“网站是”。 下面是如何轻松隔离HTTP响应代码(如果请求失败,则获取
false
):
除此之外,还有重定向的问题:如果你看到重定向,你会怎么做?您查询的服务器可能正常,但重定向到的服务器可能已关闭。如果有人在浏览器中键入URL,他们将被重定向并最终超时,而一步测试将表明一切正常。如果有重定向循环呢?浏览器会检测到这一点并最终超时,但要做到这一点,您需要编写大量代码
因此,最终cURL看起来确实是唯一可靠的解决方案,因为它可以透明地完成所有这些工作。这取决于您的情况,但特别是如果您的URL是由用户提交的,我会选择类似的方式
//returns true, if domain is availible, false if not
function isDomainAvailible($domain)
{
//check if URL is valid
if(!filter_var($domain, FILTER_VALIDATE_URL)){
return false;
}
$agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_USERAGENT, $agent);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch,CURLOPT_VERBOSE, FALSE);
curl_setopt ($ch, CURLOPT_TIMEOUT, 10);
curl_setopt ($ch,CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch,CURLOPT_SSLVERSION, 3);
curl_setopt ($ch,CURLOPT_SSL_VERIFYHOST, FALSE);
$page=curl_exec($ch);
//echo curl_error($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpcode >= 200 && $httpcode < 300)
return true;
else
return false;
}
//如果域可用,则返回true;如果域不可用,则返回false
函数IsDomainAvailable($domain)
{
//检查URL是否有效
如果(!filter\u var($domain,filter\u VALIDATE\u URL)){
返回false;
}
$agent=“Mozilla/4.0(兼容;MSIE 5.01;Windows NT 5.0)”;
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$URL);
curl_setopt($ch,CURLOPT_USERAGENT,$agent);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_VERBOSE,FALSE);
curl_setopt($ch,CURLOPT_超时,10);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
卷曲设置($ch,卷曲设置,3);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
$page=curl\u exec($ch);
//回波旋度误差($ch);
$httpcode=curl\u getinfo($ch,CURLINFO\u HTTP\u代码);
卷曲关闭($ch);
如果($httpcode>=200&$httpcode<300)
返回true;
其他的
返回false;
}
主要是因为如果您不发送useragent,某些服务器将不会响应。这取决于您的情况,但特别是如果您的URL是由用户提交的,我会选择类似的方式
//returns true, if domain is availible, false if not
function isDomainAvailible($domain)
{
//check if URL is valid
if(!filter_var($domain, FILTER_VALIDATE_URL)){
return false;
}
$agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_USERAGENT, $agent);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch,CURLOPT_VERBOSE, FALSE);
curl_setopt ($ch, CURLOPT_TIMEOUT, 10);
curl_setopt ($ch,CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch,CURLOPT_SSLVERSION, 3);
curl_setopt ($ch,CURLOPT_SSL_VERIFYHOST, FALSE);
$page=curl_exec($ch);
//echo curl_error($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpcode >= 200 && $httpcode < 300)
return true;
else
return false;
}
//如果域可用,则返回true;如果域不可用,则返回false
函数IsDomainAvailable($domain)
{
//检查URL是否有效
如果(!filter\u var($domain,filter\u VALIDATE\u URL)){
返回false;
}
$agent=“Mozilla/4.0(兼容;MSIE 5.01;Windows NT 5.0)”;
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$URL);
curl_setopt($ch,CURLOPT_USERAGENT,$agent);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_VERBOSE,FALSE);
curl_setopt($ch,CURLOPT_超时,10);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
卷曲设置($ch,卷曲设置,3);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
$page=curl\u exec($ch);
//回波旋度误差($ch);
$httpcode=curl\u getinfo($ch,CURLINFO\u HTTP\u代码);
卷曲关闭($ch);
如果($httpcode>=200&$httpcode<300)
返回true;
其他的
返回false;
}
主要是因为如果您不发送useragent,某些服务器将不会响应。我使用curl,但这只是我:
function check($url, $ignore = '')
{
$agent = "Mozilla/4.0 (B*U*S)";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_VERBOSE, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 45);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 45);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 5); //follow up to 10 redirections - avoids loops
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //fix for certificate issue
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); //fix for certificate issue
$page = curl_exec($ch);
$err = curl_error($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$codes = array(
0 => 'Domain Not Found',
100 => 'Continue',
101 => 'Switching Protocols',
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
203 => 'Non-Authoritative Information',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Found',
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
307 => 'Temporary Redirect',
400 => 'Bad Request',
401 => 'Unauthorized',
402 => 'Payment Required',
403 => 'Forbidden',
404 => 'Not Found',
405 => 'Method Not Allowed',
406 => 'Not Acceptable',
407 => 'Proxy Authentication Required',
408 => 'Request Timeout',
409 => 'Conflict',
410 => 'Gone',
411 => 'Length Required',
412 => 'Precondition Failed',
413 => 'Request Entity Too Large',
414 => 'Request-URI Too Long',
415 => 'Unsupported Media Type',
416 => 'Requested Range Not Satisfiable',
417 => 'Expectation Failed',
500 => 'Internal Server Error',
501 => 'Not Implemented',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported'
);
$httpcode_out = 'http: ' . $httpcode . ' (' . $codes[$httpcode] . ')';
$err = 'curl error: ' . $err;
$out = array(
$url,
$httpcode_out,
$err
);
if ($httpcode >= 200 && $httpcode < 307)
{//good
return array(
'Work',
$out
);
}
else
{//BAD
return array(
'Fail',
$out
);
}
}
函数检查($url,$ignore='')
{
$agent=“Mozilla/4.0(B*U*S)”;
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$URL);
curl_setopt($ch,CURLOPT_USERAGENT,$agent);
curl_setopt($ch,CURLOPT_VERBOSE,false);
curl_setopt($ch,CURLOPT_超时,45);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,45);
curl_setopt($ch,CURLOPT_头,true);
curl_setopt($ch,CURLOPT_NOBODY,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch,CURLOPT_MAXREDIRS,5);//跟踪10个重定向-避免循环
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);//修复证书问题
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);//修复证书问题
$page=curl\u exec($ch);
$err=旋度误差($ch);
$httpcode=curl\u getinfo($ch,CURLINFO\u HTTP\u代码);
卷曲关闭($ch);
$codes=数组(
0=>“未找到域”,
100=>“继续”,
101=>“交换协议”,
200=>“好的”,
201=>“已创建”,
202=>“已接受”,
203=>“非权威信息”,
204=>“无内容”,
205=>“重置内容”,