在PhP5中是否有办法获取我的所有服务器IP地址?

时间:2015-02-07 04:13:03

标签: php linux apache apache2 lamp

基本上我想在超过6个接口上加载平衡下载量。我的服务器运行Apache2和PHP5,目前我必须手动将所有服务器的ip地址输入到php文件数组中。有没有办法自动完成?

对于每个下载链接,代码目前看起来像这样:

<?php
$a = array("192.168.2.x", "192.168.2.x", "192.168.2.x", "192.168.2.x", "192.168.2.x", "192.168.2.x"); 
$b = rand(0,count($a)-1);
echo "http://". $a[$b] . "/yourDownload.zip";
?> 

服务器计算机有多个IP,每个NIC一个。这里的情况是针对大型局域网,我们希望将文件从主服务器分发给所有游戏玩家。每个玩家需要大约20GB的文件,因此严重的负载平衡并不是非常重要,但服务器即插即用的能力是。目前,每次我们使用不同的路由器或DHCP时,我都必须手动将IP地址输入到php文件中,这需要花费时间并且很容易被遗忘,直到它成为一个问题。

在上面的代码中,我希望第2行中的数组能够自动获取NIC的IP而不是硬编码。

1 个答案:

答案 0 :(得分:0)

首先你将如何保持平衡? 使用随机函数它将无法正常工作

这里有6台服务器,因此您需要在优先级基础上做一些工作

代码:

<?php

$pages = array('192.168.2.1'=>16.66, '192.168.2.2'=>16.66,'192.168.2.3'=>16.66,'192.168.2.4'=>16.66,'192.168.2.5'=>16.66,'192.168.2.5'=>16.66,'192.168.2.6'=>16.66);


function getServerByWeight(array $weightedValues) {
    $rand = mt_rand(1, (int) array_sum($weightedValues));

    foreach ($weightedValues as $key => $value) {
      $rand -= $value;
      if ($rand <= 0) {
        return $key;
      }
    }
 }


$page = getServerByWeight($pages);


echo "http://".$page. "/yourDownload.zip";