Développement d'applications Web — 2ème Partie

Gazette Linux n°49 — Janvier 2000

Carine Bournez

Adaptation française 

Frédéric Marchal

Correction du DocBook 

Article paru dans le n°49 de la Gazette Linux de janvier 2000.

Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Comme promis, je vais vous donner, les amis, un autre exemple de programme php3. Ce programme est très simple, et quand même assez utile.

Une nuit, j'étais à l'université en train de travailler et j'ai essayé d'appeler ma femme à la maison. Malheureusement, j'avais laissé mon ordinateur connecté ce jour-là, et je ne pouvais pas m'en sortir. Donc, comme Apache tourne sur mon ordinateur, j'ai décidé de scanner les IPs de mon FAI et trouver quel ordinateur était le mien, afin de faire un telnet dessus et le déconnecter à distance.

La manière la plus rapide et la plus simple de faire ceci est soit php3, soit java, mais je ne suis pas très fan d'applets java, j'ai décidé de le faire en php3.

Et voilà comment ça se présente :

<?
    //Author: Anderson Silva
    //Date: September, 1999
    //Opens socket and goes through a bunch of sequential IPs, and
    //it returns all the address that have a web server running.
  
    // This loop will go through all addresses in the block 10.0.0.x
    // The 10.0.0.x series is a fictional example, these IPs are normally
    // for intranet addresses, I am just trying to keep my ISP safe from
    // all of you guys :-)
    for($i=1; $i < 256; $i++)
    {
       // $path is the variable that will hold the URL you are testing.
       $path = "http://10.0.0.".$i;
  
       // Opens socket on server PAI, port 80.
       $fp = fsockopen("pai", 80, &$errno, &$errstr);
  
       // Sends the HTTP request that returns the info we need to know.
       fputs($fp,"GET $path HTTP/1.0\n\n");
       set_socket_blocking($fp, false);
  
       // This is the string we wait for as a reply to the HTTP request.
       $str2 = "HTTP/1.0 200 OK";
  
       // Gives the program 2 seconds to try to connect to the server.
       Sleep(2);
  
       // Captures the line from the HTTP request.
       $line = fgets($fp, 16);
       // If str2 is the same line, then we have a match, and there is a web
       // server running. Then go ahead and show me the name of the server with
       // a link to it.
       if (strcmp($line, $str2) == 0)
            echo "<A HREF=".$path.">".gethostbyaddr($pathhost)."</a><br>\n";
       fclose($fp);
    }
?>

Une remarque importante : ce procédé est très simple, mais très inefficace, car pour chaque IP on attend au maximum 2 secondes. Donc, n'abusez pas de ce script, vous récupèreriez probablement une opération de dépassement de temps maximum (time out) de votre serveur web, ou bien vous resteriez bloqué en attente pendant toutes les itérations pour un bon moment.

Cela dit, c'est un bon exemple de ce que vous pouvez faire comme simple utilisateur avec php3.

Le mois prochain, j'écrirai encore un autre exemple de programme php3, cette fois-ci je vous montrerai comment créer votre propre livre d'or, en utilisant php3 et mySQL.

Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.