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>