2.34   PHP

PHP, che sta per "PHP: Hypertext Preprocessor", è un linguaggio di script immerso nel HTML. La sua sintassi è presa in prestito dai linguaggi C, Java e Perl. Al linguaggio sono state aggiunte alcune specifiche caratteristiche allo scopo di semplificare il lavoro dei webmaster nella realizzazione di pagine dinamiche.

PHP fu concepito sul finire del 1994 da Rasmus Lerdorf. Nella metà del  1995 venne riscritto il parser, vi venne integrato un gestore di Form preesistente ed il supporto di mSQL (PHP/FI); da quella data molte persone iniziarono a  contribuire con la scrittura di codice.

Alla fine del 1966 PHP/FI era utilizzato in almeno 15.000 siti Web nel mondo. Nella metà del 1997 questo numero crebbe fino ad oltre 50.000. Nella metà del 1997 PHP, da progetto personale di Rasmus Lerdorf, divenne oggetto di attività di gruppo più accentuata. Il parser fu totalmente riscritto da  Zeev Suraski e Andi Gutmans e questo ha formato la base di PHP versione 3.

A fine 1999 sia PHP/FI che PHP 3 sono incluse in prodotti commerciali quali il web server C2 di StrongHold per i server Linux RedHat. Secondo una stima prudenziale basata su una estrapolazione dal numero fornito da NetCraft (si veda anche Netcraft Web Server Survey)  PHP sarebbe utilizzato su oltre 1.000.000 di siti nel mondo. Per rendere l’idea sono più siti di quelli in cui è utilizzato il server Enterprise di Netscape.

L'utilizzatore di PHP dispone di oltre ottanta librerie di funzioni: matematiche, input/otpurt, accesso ai più diffusi data base,  grafica, compressione, accesso ai protocolli COM e CORBA, ecc….

PHP ha una ridondanza masochistica di funzioni: molte sono simili o hanno sinonimi; ridondanza di sintassi: blocchi individuati da parentesi graffe o dalla coppia  {: endblocco}:

If (...):

...

endif;

Ridondanza di operatori, alcuni sono duplicati con diverse precedenze (or e ||, and e &&). Tuttavia PHP è un buon strumento per generare pagine HTML con un'ampia gamma di applicabilità.

Nell'esempio che segue è implementata una ricerca di documenti tramite contenuto, in particolare il sistema si basa su una tabelle con i documenti ed una con le parole con i riferimenti ai documenti. Nella variabile $Ricerca c'è il contenuto di un text box ricevuto da un form precedente, in esso ci sono le parole relatrive ai documenti da cercare, con eventuali operatori booleani {e o n}, ad esempio "muro n cavatappi". 

<html>

  <head>

     <title>Guarini CISTERNA</title>

  </head>

  <body>

    <?php  // Versione 4.0.4pl1

      $parole = explode(" ","O " . strtoupper($Ricerca));

      // cerca i record contenenti le parole di ricerca e genera un combo

      $trovati =array();   

      foreach ($parole as $parola):

        if (strlen($parola) > 0): 

          if (strtr($parola, "EON", "   ") == " "): // operatori e o non

            $operatore = $parola;                 

          else:

            $trovati2 = Cerca($parola);

            if ($operatore == "O"):

              $trovati = array_merge($trovati,$trovati2);

            else:

              $trovati = array_bool($trovati,$trovati2,$operatore);

            endif;

          endif;

        endif;

      endforeach;        

      $nOggetti = count($trovati);   

      $info = "Trovati ".$nOggetti." oggetti con ";

      $frm = "GUAFound.php";

      $azione = "Visualizza";

      switch ($nOggetti) {

        case 0:

          $azione = "Nuova ricerca";

          $info = "Nessun oggetto trovato con ";

          $frm ="GUARetrieval.php";

          break;

        case 1:

          $info = "Trovato un oggetto con ";

      }

      echo "<P align=center class=testo><B>".$info."</B><I><U>".$Ricerca."</I></U></P>";

      ?>

    <table width=200 align=center><tr><td>

    <form name="formFoundList" form action="<?PHP echo $frm?>" method="POST">

    <?PHP if ($nOggetti > 0) echo "<select name='SceltaOggetto'  size=1>";

          // generazione del combo

    while (list ($key, $val) = each ($trovati)):

    echo "<option value ='$key'>$val</option>";

    endwhile;

      echo "<input type=submit value='".$azione."'"?>

    </form> 

    </td></tr></table>

  </body>

</html>

<?PHP

  function Cerca($parola) {

      $Risultato[0]="";

      $db=odbc_connect("CISTERNA","","");

      $Where = "PAROLA LIKE '".$parola."%' AND INFOTRIAL.NCTN = OGGETTI.NCTN";

      $SQL="SELECT INFOTRIAL.NCTN,OGTD FROM INFOTRIAL,OGGETTI WHERE ".$Where; 

      $res=odbc_exec($db,$SQL);

      $item = array();

      while(TRUE):

        $NumCol=odbc_fetch_into ($res,0,&$Risultato);     

        if ($NumCol < 1) break;

      $item[$Risultato[0]] =  $Risultato[1];

      endwhile;

      odbc_close($db);

      ksort($item);

      return($item);

}

function array_Bool($matrice,$matrice2,$op)

// se $op = "e" esegue $matrice and $matrice1

// se $op = "n" esegue $matrice and (not $matrice1)

{

// cerchiamo le chiavi uguali

$matricerisultato = array ();

reset($matrice);

while (list ($key,$value) = each ($matrice)) {

    $trovato = 0;

      reset($matrice2);

    while (list ($key2,$value2) = each ($matrice2)) {

          if ($key == $key2):

            $trovato = -1;

            break; 

          endif;

    }

    if ($op == "N") $trovato = -($trovato + 1);

    if ($trovato == -1) $matricerisultato[$key] = $value;

}

return ($matricerisultato);

}

?>

La pagina HTML di una semplice ricerca è:

<html>

  <head>

     <title>Guarini CISTERNA</title>

  </head>

  <body>

    <P align=center class=testo><B>Trovati 2 oggetti con </B>

    <I><U>muro n cavatappi</I></U></P>

    <table width=200 align=center><tr><td>

      <form name="formFoundList" form action="GUAFound.php" method="POST">

        <select name='SceltaOggetto'  size=1>

          <option value ='R0188867'>STADERA DA MURO</option>

          <option value ='R0189035'>SCAFFALE</option>

        <input type=submit value='Visualizza'   

      </form> 

    </td></tr></table>

  </body>

</html>