 |
|
 |
 | PHP si functiile de retea PHP |  |
Trimis: 19/07/2007 17:00 |
|
|
| Ad_Infinitum |
| Administrator |

 |
 |
| Data inscrierii: 23/Iun/2007 |
| Mesaje: 212 |
|
|
|
 |
 |
 |
|
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 produs a fost întrebuințat un Pentium III, cu memoria interna 256 Mo, cercul dur de 20 Go, frecventa de fapt 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 indiferent ce alt calculator din retea, tastand urmatoarea adresa in Internet Explorer: http://forum/test/program.php
Fie urmatorul program PHP:
| Citat: |
<?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:
| Citat: |
$ip = $_SERVER['REMOTE_ADDR']; // adresa clientului
|
Functia predefinita GETHOSTBYADDR îngăduie 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:
| Citat: |
$gazda = gethostbyaddr($ip);
|
In caz de esec (gazda negasita), functia GETHOSTBYADDR returneaza IP-ul argument, in loc de numele gazdei.
Exemplu:
| Citat: |
if($gazda==$ip)
{
// esec
}
|
Recunosc ca sunt incepator in PHP. Am scris acest obiect ca un exemplu pentru ceilalti incepatori si ca un subiect de discutii (provocare) pentru cei avansati. Am doua intrebari:
1. de ce merge groaznic de incet?
2. cunoasteti alte functii PHP pentru inspectarea retelei? |
|
|
|
|
|
|
Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro
|
|