PHP-如果所有数组都处于活动、非活动或不可用状态,则显示消息

PHP-如果所有数组都处于活动、非活动或不可用状态,则显示消息,php,arrays,server,status,Php,Arrays,Server,Status,我想添加一条整体消息,该消息会根据在线服务器的不同而变化。与此类似,它有一个总的绿色div,告诉访问者一切都已启动并运行,但如果其中一台服务器停机,它将变为橙色,如果所有服务器停机,它将变为红色。收集阵列中的服务器状态,然后检查是否 在您的情况下,我更喜欢另一种方法,然后直接询问页面。在您的位置上,我将构建一个cronjob,它每分钟检查您的服务,并将状态保存在数据库或其他东西中。然后你可以用这些数据建立一个图表 但对于你的情况。为了实现这一点,我更愿意在服务器上运行一个循环,然后将每个失败的声

我想添加一条整体消息,该消息会根据在线服务器的不同而变化。与此类似,它有一个总的绿色div,告诉访问者一切都已启动并运行,但如果其中一台服务器停机,它将变为橙色,如果所有服务器停机,它将变为红色。

收集阵列中的服务器状态,然后检查是否


在您的情况下,我更喜欢另一种方法,然后直接询问页面。在您的位置上,我将构建一个cronjob,它每分钟检查您的服务,并将状态保存在数据库或其他东西中。然后你可以用这些数据建立一个图表

但对于你的情况。为了实现这一点,我更愿意在服务器上运行一个循环,然后将每个失败的声明保存在一个数组中。之后,您可以使用该数组。所以数组中有一个条目是橙色的。如果有多个条目,则为红色状态。或者更容易使用计数器变量

<?php 
$status = array();
foreach($server as $host => $port){ 
    $status[] = servercheck($host,$port);
}

if (in_array('0', $status)) {
    echo $offline;
} else {
    echo $online;
}
您的完整代码:

$errors = 0;
foreach($server as $host => $port) { 
    if(servercheck($host, $port) == 0) {
        $errors++;
    } 
}

if ($errors == 0) {
    echo "green!";
} elseif ($errors == 1) {
    echo "orange!";
} else {
    echo "red!";
}


有人这样想。我不知道它是否正确,但你可以测试一下

我想你的意思是
如果(servercheck($host,$port)==0)
哦,对不起,是的…)我已经改变了。不客气,用
setInterval
代替cron怎么样?@hassan你可以这样做,但是当你没有一些信息时,你就不能构建图表和处理数据了。所以我会将这些信息存储在一个地方,然后处理这些数据,这样你就有了更多的可能性。@Stony你能把你的新代码放在我的旧代码中吗?因为我不确定把你给出的代码放在哪里(我是PHP新手)
$errors = 0;
foreach($server as $host => $port) { 
    if(servercheck($host, $port) == 0) {
        $errors++;
    } 
}

if ($errors == 0) {
    echo "green!";
} elseif ($errors == 1) {
    echo "orange!";
} else {
    echo "red!";
}
<?php
//Page Variables
$online = '<td style="background-color:#00FF00; padding:5px;">Operational</td>';
$offline = '<td style="background-color:#FF0000; padding:5px;">Failed</td>';

//Functions
function servercheck($server, $port) {
    //Check that the port value is not empty
    if (empty($port)) {
        $port = 80;
    }
    //Check that the server value is not empty
    if (empty($server)) {
        $server = 'domain.com';
    }
    //Connection
    $fp = @fsockopen($server, $port, $errno, $errstr, 1);
    //Check if connection is present
    if ($fp) {
        //Return Alive
        return 1;
    } else {
        //Return Dead
        return 0;
    }
    //Close Connection
    fclose($fp);
}

//Ports and Services to check
$services = [
    'Website Access' => ['domain.com' => 80],
    'Another Service' => ['domain.com' => 443],
    'Another Service' => ['domain.com' => 21],
];

$errors = 0;
foreach($services as $host => $port) {
    if(servercheck($host, $port) == 0) {
        $errors++;
    }
}
?>

<div class="infobox">
    <?php
    if ($errors == 0) {
        echo $online;
    } elseif ($errors > 1) {
        echo $offline;
    }
    ?>
</div>
<div class="overallmesssage">
    <h3></h3>
</div>