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

时间:2016-05-05 08:49:04

标签: php curl cron

我需要创建一个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执行问题,我想知道是否有更好或更快的方法来检查这些网站。

2 个答案:

答案 0 :(得分:0)

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

  

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

您的SQL查询应该选择&#39; last_check&#39;其中&#39; last_check&#39;不等于当前日期。每个查询限制为10个结果。

设置你的cron每分钟运行一次php脚本,从午夜到早上6点。

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

答案 1 :(得分:0)

如果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);