PHP检查网站在线或离线问题

时间:2016-07-19 12:16:12

标签: php

这适用于检查网站是否在线:

<?php
$host = 'http://jdfhgjfdhjanmczxmcnaushdfjsa.com';
if($socket =@ fsockopen($host, 80, $errno, $errstr, 30)) {
        echo 'true';
fclose($socket);
}else{
    echo 'false';

}

但是当我尝试检查多个网站时,它不起作用。他们都回归虚假。为什么呢?

<?php
$hosts = array();
$hosts[] = 'jdfhgjfdhjanmczxmcnaushdfjsa.com';
$hosts[] = 'google.co.il';
  $i = 0;
foreach($hosts as $host){
    $i++;
    if($socket =@ fsockopen($host[$i], 80, $errno, $errstr, 30)) {
        echo 'true';
fclose($socket);
}else{
    echo $host.' false';

}   
}

3 个答案:

答案 0 :(得分:2)

第二个代码不起作用的原因是您没有正确访问主机

更改

if($socket = @fsockopen($host[$i]...)

if($socket = @fsockopen($host...)

您不需要$i索引。你可以完全摆脱它。

<强>附录

当你第一次发布时,你注意到循环中的呼叫不起作用但是调用了一个域。上面的修复是您原始问题的解决方案。您面临的问题是另一个问题:您错过了它,因为您在函数调用前添加了错误抑制运算符@。删除它会显示问题:

  

fsockopen()因安全原因被禁用

联机沙箱禁用fsockopen,因此您无法依赖其输出来确定该代码是否有效。顺便说一句,使用错误抑制是一个坏主意,特别是在开发中。

答案 1 :(得分:1)

您将 for foreach 循环组合在一起 - 如果您使用 foreach ,则不要&#39;我需要担心$i变量。在这种情况下,您需要通过$i索引检查hosts数组,但是根据$host变量进行报告,这可能会让人感到困惑。

以下对我有用:

<?php
$hosts = array();
$hosts[] = 'jdfhgjfdhjanmczxmcnaushdfjsa.com';
$hosts[] = 'google.co.il';

foreach($hosts as $host){
    if($socket =@ fsockopen($host, 80, $errno, $errstr, 30)) {
        echo 'true';
        fclose($socket);
    }
    else {
        echo $host.' false';
    }
}

另外,请记住,大多数在线沙箱都会禁用fsockopen等功能,以防止它们被恶意使用,因此上面给出的示例网址可能永远不会起作用。从你问题中的一个:

  

此脚本适用于功能白名单。所有不需要磁盘,系统或网络访问的功能都列入白名单,其他功能列入黑名单。最长执行时间设置为3秒。

答案 2 :(得分:0)

尝试:

    <?php
function Visit($url){
       $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, 5);
       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;
}
if (Visit("http://www.google.com"))
       echo "Website OK"."n";
else
       echo "Website DOWN";
?>

尝试使用谷歌查找解决方案。这段代码对我有用,我在https://css-tricks.com/snippets/php/check-if-website-is-available/

上找到了它