Php 获取站点状态-向上或向下

Php 获取站点状态-向上或向下,php,web,Php,Web,我使用上面的程序来获取站点的状态。但我总是收到一条离线消息。 代码有错误吗?主机名不包含http://,这只是URI的方案 将其删除并尝试以下操作: <?php $host = 'http://google.com'; if($socket =@ fsockopen($host, 80, $errno, $errstr, 30)) { echo 'online!'; fclose($socket); } else { echo 'offline.'; ?> 应该是 <?ph

我使用上面的程序来获取站点的状态。但我总是收到一条离线消息。
代码有错误吗?

主机名不包含http://,这只是URI的方案

将其删除并尝试以下操作:

<?php
$host = 'http://google.com';
if($socket =@ fsockopen($host, 80, $errno, $errstr, 30)) {
echo 'online!';
fclose($socket);
} else {
echo 'offline.';
?>

应该是

<?php
$host = 'google.com';
if($socket =@ fsockopen($host, 80, $errno, $errstr, 30)) {
echo 'online!';
fclose($socket);
} else {
echo 'offline.';
}
?>
不是

但是卷曲会更好

卷曲解决方案呢?
我知道这是一篇老文章,但您也可以分析以下内容的输出:

function checkOnline($domain) {
   $curlInit = curl_init($domain);
   curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
   curl_setopt($curlInit,CURLOPT_HEADER,true);
   curl_setopt($curlInit,CURLOPT_NOBODY,true);
   curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);

   //get answer
   $response = curl_exec($curlInit);

   curl_close($curlInit);
   if ($response) return true;
   return false;
}
if(checkOnline('http://google.com')) { echo "yes"; }
这将为您提供完整的HTTP状态。

这可以更快地工作

$header_check = get_headers("http://www.google.com");
$response_code = $header_check[0];

这是一种比fsock更快的方法

<?php
$domain = '5wic.com';
if(gethostbyname($domain) != $domain )
{
echo "Up";
}
else
{
echo "Down";
}
?>
您可以使用以下选项:

$url = 'https://google.com';
$url = gethostbyname(str_replace(['https://','http://'],NULL,$url));
if(filter_var($url,FILTER_VALIDATE_IP)) {
   // online!
}
else {
   // offline :(
}
这将获取不存在的域的IP地址,并将其与域的IP进行比较;如果相等,则站点关闭,否则其打开


另外,在使用此函数时不要包含
https://
前缀

删除错误抑制运算符(@)。
errno和
errstr`的内容是什么?当我尝试上面的代码时,检查一下这个,我得到了以下错误:警告:fsockopen():无法连接(找不到套接字传输“http”-您在脱机第4行配置PHP时忘记启用它了吗?/stchecker.PHP。不幸的是,这不是最佳解决方案。当服务器关闭时,由于DNS解析,这可能仍然表示网站已运行一段时间。我会选择上面的@stewe解决方案。还有更多的含义,请查看php网站。谢谢
<?php
$domain = '5wic.com';
if(gethostbyname($domain) != $domain )
{
echo "Up";
}
else
{
echo "Down";
}
?>
$url = 'https://google.com';
$url = gethostbyname(str_replace(['https://','http://'],NULL,$url));
if(filter_var($url,FILTER_VALIDATE_IP)) {
   // online!
}
else {
   // offline :(
}
function is_on($domain) {
  if(gethostbyname($domain) === gethostbyname("testillegaldomain.tld")) {
    return false;
  } else {
    return true;
  }
}