PHP Serverin kaistankulutuksen näyttö (Linux)

PHP Serverin kaistankulutuksen näyttö (Linux)

Viesti Harr1l 31 Maalis 2007 15:26

Seuraavalla pätkällä voi katsoa kaistankulutuksen serverillä. Sen voi siis laittaa vaikka etusivulle näyttämään, kuinka kovasti tyypit lataavat tavaraa serveriltäsi.

Esimerkkikoodi täällä.

Koodi: Valitse kaikki
<?php

$aika = 1; //aika sekunteina liikenteen tarkastamiseen (suurempi tarkempi)
$verkkokortti = "eth0"; //laita verkkorttisi tähän
$kerrat = 1;
$tdsto = @fopen("/proc/net/dev", "r");
if ($tdsto) //tarkastetaan avaamisen onnistuminen
{
   while (!feof($tdsto))
   {
      $rivi = fgets($tdsto, 4096);
      $rivi = preg_replace('/\s\s+/', ' ', $rivi); //poistetaan turhat välilyönnit
      if (stristr($rivi, $verkkokortti) && $kerrat == 1)
      {
         //$iface, $recbyt, $recpack, $recerr, $recdrop, $recfifo, $recframe, $reccompr, $recmulti, $senbyt, $senpack, $senerr, $sendrop, $senfifo, $senframe, $sencompr, $senmulti
         $raaka1 = explode(":", $rivi, 2); //erotetaan luvut ja verkkokortti
         $tiedot1 = explode(" ", $raaka1[1]); //tehdään luvuista taulukko
         rewind($tdsto); //kelataan tiedoston alkuun (kyseessä ei ole "oikea tiedosto" joten ei tarvitse sulkea ja avata uudestaan)
         sleep($aika); //odotetaan seuraavaa tarkastusta
         $kerrat = 2; //seuraavalla kerralla eri hommat
      }
      elseif (stristr($rivi, $verkkokortti) && $kerrat == 2)
      {
         $raaka2 = explode(":", $rivi, 2);
         $tiedot2 = explode(" ", $raaka2[1]);
      }
   }
   fclose($tdsto);
}
$kerroin = 1 / $aika; //kertoimet oikein
$nopeussis = $tiedot2[0] - $tiedot1[0]; //vähennetään myöhempi liikenne aikaisemmasta
$nopeussis = round($nopeussis * $kerroin / 1024, 1); //kerrotaan ajalla ja jaetaan kilotavuiksi
$nopeusulo = $tiedot2[8] - $tiedot1[8]; //samat ulos
$nopeusulo = round($nopeusulo * $kerroin / 1024, 1);

//seuraava tarkastus on ettei tule negatiivisia lukemia (liikennelaskuri nollautuu välillä)
if ($nopeusulo < 0)
{
   $nopeusulo = 0;
}
if ($nopeussis < 0)
{
   $nopeussis = 0;
}

echo "Sisään: $nopeussis kt/s, ulos: $nopeusulo kt/s";
   
?>


Jos verkkokortti eth0 ei toimi, kokeile eth1 jne. tai käytä seuraavaa koodia ja käytä sitä ethX, jonka perässä on muuta kuin nollaa. Ei siis lo kuitenkaan. Ulos pitäisi näkyä tämmöistä.

Koodi: Valitse kaikki
<?php
$kahva = fopen("/proc/net/dev", "r");
while (!feof($kahva))
{
   $rivi = fgets($kahva, 4096);
   echo "$rivi <br />";
}

fclose($kahva);
?>
[piilotettu kuva]
Käyttäjän avatar
Harr1l
 
Viestit: 61

Viesti Penikka 05 Huhti 2007 10:25

eipä toimi. :<
Penikka
 
Viestit: 7

Viesti Harr1l 06 Huhti 2007 21:38

Onhan serverissä Linux? Ja verkkokortti laitettu oikein? Tuolla jälkimmäisellä pätkällä voi katsoa mikä verkkokortti, mutta jos sekään ei toimi niin jossain on vikaa. Tai sitten serverissä ei ole Linuxia.
[piilotettu kuva]
Käyttäjän avatar
Harr1l
 
Viestit: 61

Viesti Penikka 07 Huhti 2007 09:55

Kyl, Ubuntu 6.06 on koneessa. Jälkimmäinenkään ei tuntunut toimivan.. Pitää kokeilla vielä kerran. :)

E: Edellisellä kerralla kokeilin laittaa tuota koodia Fedora-servulle, mut ubuntussa toimii \o/
Penikka
 
Viestit: 7

Palaa alueelle Ohjelmointioppaat