这适用于检查网站是否在线:
<?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';
}
}
答案 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/
上找到了它