在同一页面上两次使用此功能时遇到问题;

时间:2016-06-30 12:29:08

标签: php

好的,我正在尝试在我的网站上创建服务器状态页面,并且我一直在使用以下功能来查看网站是否有效。但是,当我尝试进行多次搜索时,响应总是DOWN表示第一个之后的响应。

访问功能

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);
       $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
       curl_close($ch);
       if($httpcode>=200 && $httpcode<300) return true;
       else return false;
}

的index.php

if (Visit("http://twitter.com")){
       echo "OK";
}else{
       echo "DOWN";
}

if (Visit("http://google.com")){
       echo "OK";
       }else{
       echo "DOWN";
}

错误记录

[30-Jun-2016 12:11:10 UTC] PHP Warning:  fread() expects parameter 1 to be resource, boolean given in /public_html/blog/server-status.php on line 40
[30-Jun-2016 12:11:10 UTC] PHP Warning:  fclose() expects parameter 1 to be resource, boolean given in /public_html/blog/server-status.php on line 41

第40和第41行是;

   curl_setopt($ch, CURLOPT_USERAGENT, $agent);
   curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

执行上述脚本时给出的响应是OK DOWN即使谷歌已经启动。我尝试过其他链接,但都产生了同样的错误。

1 个答案:

答案 0 :(得分:2)

该功能之所以没有返回true,是因为Google使用302 Found HTTP代码回答。

Google Inspector

Twitter也是如此,但它以301代替。

您应该检查响应是否是重定向,并可能相应地返回。

这是var_dump($httpcode)输出的内容;

enter image description here

我尝试使用Visit("https://www.google.it")并且它可以正常工作。

enter image description here