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