使用PHP脚本检查网站是否在线


Checking if a website is online using a PHP Script

我需要创建一个PHP脚本,该脚本可以成功地检查网站是否当前在线/仍然处于活动状态。

我有一个大约3000个网站的列表要检查,我想设置一个CRON作业,每天运行脚本,以确保网站仍然活跃。

我做了一些研究,并用这个例子构建了一些东西:

<?php
       if (isDomainAvailible('http://www.css-tricks.com'))
       {
               echo "Up and running!";
       }
       else
       {
               echo "Woops, nothing found there.";
       }
       //returns true, if domain is availible, false if not
       function isDomainAvailible($domain)
       {
               //check, if a valid url is provided
               if(!filter_var($domain, FILTER_VALIDATE_URL))
               {
                       return false;
               }
               //initialize curl
               $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;
       }
?>

但它总是在300次左右的检查后超时,因为我知道这可能是PHP执行问题,我想知道是否有更好或更快的方法来检查这些网站。

如果allow_url_fopen指令为On:,也可以使用fopen()等函数

$handle = fopen("http://www.example.com/", "r");

或stream_context_create():

$opts = array('http' => array(
    'method'=>"GET",
));
$context = stream_context_create($opts);
$fp = fopen('http://www.example.com', 'r', false, $context);
fpassthru($fp);
fclose($fp);

假设链接存储在数据库中,您可以在数据库表DATE字段中添加,例如"last_check"和检查后更新日期。

但每个站点5秒,乘以3000多个站点意味着250分钟,我认为这不是一个可行的解决方案SNpn

SQL查询应选择"last_check",其中"last_ceck"不等于当前日期。每个查询最多只能有10个结果。

将您的cron设置为每分钟运行php脚本,从午夜到早上6点。

* 0-6 * * * *   PATH/TO/YOUR/PHP/SCRIPT