RicH and FamouS

       Home         Glosar IT                                                                                                                                                                                                              SUBSCRIBE NOW!
        

04.04.2009

PHP si functiile de retea

Testele au fost efectuate intr-o retea locala, majoritatea
calculatoarelor fiind Pentium III si Pentium IV, ruland sub Windows.
Exista si un calculator Linux (server-ul de Internet). IP-urile sunt
alocate static in domeniul 192.168.168.x.

Pentru testele descrise in acest articol a fost utilizat un Pentium
III, cu memoria interna 256 Mo, discul dur de 20 Go, frecventa de lucru
de 1000 MHz, sistemul de operare Windows 2000 Professional, plus
server-ul de Web Microsoft IIS, avand numele FORUM.

Programele au fost scrise in limbajul PHP, au fost stocate pe
server in directorul TEST, fiind lansate in executie de pe orice alt
calculator din retea, tastand urmatoarea adresa in Internet Explorer: http://forum/test/program.php

Fie urmatorul program PHP:

Cod:
<?ph
$timp1 = time();
$ip = $_SERVER['REMOTE_ADDR']; // adresa clientului
echo 'Adresa IP a clientului este '.$ip.'<br>';
echo 'Se presupune masca 255.255.255.0'.'<br>';
$lungime=strlen($ip);
if($lungime>0)
{
$pozitie = strrpos($ip,'.');
if ($pozitie === false)
{
// nu exista punct in adresa IP!
}
else
{
$retea=substr($ip,0,$pozitie);
echo 'Adresa de retea este '.$retea.'<br>';
$lim_inf = 1; // limita inferioara
$lim_sup = 254; // limita superioara
echo 'Se scaneaza intervalul ['.$retea.'.'.$lim_inf.', '.$retea.'.'.$lim_sup.']'.'<br>';
$gasite = 0;
for($indice=$lim_inf;$indice<=$lim_sup;$indice++)
{
$ip_temp = $retea.'.'.$indice;
$gazda=gethostbyaddr($ip_temp);
if($gazda!=$ip_temp)
{
echo 'Adresa IP este '.$ip_temp.', numele gazdei este '.$gazda.'<br>';
$gasite = $gasite + 1;
}
}
echo 'Au fost gasite '.$gasite.' calculatoare in functiune'.'<br>';
}
}
else
{
echo 'Adresa IP nula'.'<br>';
}
$timp2 = time();
$secunde = ($timp2 - $timp1);
echo 'A durat '.$secunde.' secunde'.'<br>';
$minute = round($secunde / 60);
echo 'Adica '.$minute.' minut(e)'.'<br>';
?>

Explicatiile sunt extrase din Manualul PHP (http://www.php.net/manual/en/).

$_SERVER este un masiv (tablou) asociativ care contine informatii
diverse furnizate de server-ul Web. Nu exista nici o garantie ca
fiecare server Web furnizeaza astfel de informatii. Server-ele Web pot
omite unele din informatii, in timp ce vor furniza altele
(necunoscute). Masivul $_SERVER este ,,superglobal'', adica o variabila
globala in mod automat. NU este necesar ca variabila $_SERVER sa fie
declarata ca fiind globala. Variabila $HTTP_SERVER_VARS contine
aceleasi informatii, dar nu este globala in mod automat! Variabilele
$_SERVER si $HTTP_SERVER_VARS sunt doua variabile diferite, chiar daca
ambele contin aceleasi informatii.

Variabila $_SERVER['REMOTE_ADDR'] reprezinta adresa IP a clientului
(de exemplu, 192.168.168.39). Presupunand masca de retea 255.255.255.0,
rezulta ca adresa retelei va fi 192.168.168. Asta inseamna ca adresele
IP ale calculatoarelor din reteaua locala se vor afla in intervalul
[192.168.168.1, 192.168.168.254]. Au fost omise adresele 192.168.168.0
(reteaua in totalitatea ei, NETWORK) si 192.168.168.255 (toate
calculatoarele din retea, BROADCAST).

Exemplu:

Cod:
$ip = $_SERVER['REMOTE_ADDR']; // adresa clientului

Functia predefinita GETHOSTBYADDR permite aflarea numelui unui
calculator pe baza adresei IP cunoscute. De exemplu, in reteaua de mai
sus, adresei 192.168.168.40 ii corespunde numele FORUM, iar adresei
192.168.168.39 ii corespunde numele BRIO.

Exemplu:

Cod:
$gazda = gethostbyaddr($ip);

In caz de esec (gazda negasita), functia GETHOSTBYADDR returneaza IP-ul argument, in loc de numele gazdei.

Exemplu:

Cod:
if($gazda==$ip)
{
// esec
}

    Blog din Moldova    FastCounter 

 
Copyright © 2008-2010 Foster1. All rights reserved.