Web Programming e PHP

19
Pag. 1 Web Programming e PHP Web Programming e PHP Gruppo Reti TLC [email protected] http://www.telematica.polito.it/ 2 Documenti dinamici La distribuzione di documenti statici costituisce solo una piccola parte dell'attività di un server Come in ogni mezzo di (tele)comunicazione, la popolarità e il successo del mezzo dipende dalla capacità di fornire informazione dinamica, aggiornata e ritagliata sui requisiti dell'utente La conseguenza è stata che, di pari passo allo sviluppo di HTML e degli aspetti più statici del Web, c'è stato lo sviluppo di tutta una serie di metodi per superare la staticità del mezzo o per semplificarne la sua gestione dinamica 3 Dinamico sarai tu! Prima di addentrarci dei diversi aspetti tecnici ci serve considerare quali alcuni possibili effetti dinamici voluti: sequenze di pagine presentate in un ordine temporizzato o man mano che vengono prodotte contenuto della pagina che contenga dati forniti dall'utente contenuto della pagina che faccia riferimento ad un'informazione corrente del server (ora, data, numero di utenti, temperatura del locale del server, ecc.) pagine costruite prelevando gran parte dei loro contenuti da fonti diverse e/o presentate con un layout scelto dall'utente documenti in cui la rappresentazione visiva del browser dipende dall'azione dell'utente Vedremo possibili approcci per ottenere questi effetti

Transcript of Web Programming e PHP

Page 1: Web Programming e PHP

Pag. 1

Web Programming e PHP

Web Programming e PHP

Gruppo Reti [email protected]

http://www.telematica.polito.it/

2

Documenti dinamici

• La distribuzione di documenti statici costituiscesolo una piccola parte dell'attività di un server

• Come in ogni mezzo di (tele)comunicazione, lapopolarità e il successo del mezzo dipende dallacapacità di fornire informazione dinamica,aggiornata e ritagliata sui requisiti dell'utente

• La conseguenza è stata che, di pari passo allosviluppo di HTML e degli aspetti più statici delWeb, c'è stato lo sviluppo di tutta una serie dimetodi per superare la staticità del mezzo o persemplificarne la sua gestione dinamica

3

Dinamico sarai tu!• Prima di addentrarci dei diversi aspetti tecnici ci serve

considerare quali alcuni possibili effetti dinamici voluti:– sequenze di pagine presentate in un ordine temporizzato o man

mano che vengono prodotte– contenuto della pagina che contenga dati forniti dall'utente– contenuto della pagina che faccia riferimento ad un'informazione

corrente del server (ora, data, numero di utenti, temperatura dellocale del server, ecc.)

– pagine costruite prelevando gran parte dei loro contenuti dafonti diverse e/o presentate con un layout scelto dall'utente

– documenti in cui la rappresentazione visiva del browser dipendedall'azione dell'utente

• Vedremo possibili approcci per ottenere questi effetti

Page 2: Web Programming e PHP

Pag. 2

Web Programming e PHP

4

Dove essere dinamici

• Possiamo distinguere diverse modalità di gestionedella dinamica nell'informazione Web– Gestione server-side

La variabilità dell'informazione rappresentata vienecompletamente controllata dal server: lo stesso URLpuò fornire contenuti diversi in diversi istanti di tempoo a diverse persone nel medesimo istante

– Gestione client-sideLa dinamicità del documento non sta solo nel contenuto(che continua in larga parte a dipendere dal server) maanche nelle sue possibilità di rappresentazionealternative, dipendenti dalle capacità del client

5

Gestione server-side

• Il server non ha particolari vincoli nei mezzi chepuò usare per produrre informazioni dinamiche,fintanto che queste sia rappresentate in unformato corretto

• Storicamente l'unico vero vincolo fondamentaleper un server è risultato essere l'efficienza

• Il server ha in generale due opzioni:– ricorrere all'uso di programmi esterni– implementare il servizio come funzione interna

6

Server-side: Programmi esterni

• L'uso di programmi esterni ricade sotto la categoriadei programmi CGI (anche se di fatto non è dettoche questi facciano uso dell'informazione fornitaattraverso l'interfaccia)

• Per quanto versatile, questa soluzione ha due grossisvantaggi:– l'esecuzione di programmi esterni ha un overhead non

indifferente nell'attivazione del processo da parte delsistema operativo

– la natura stateless di HTTP rende il mantenimento diinformazioni tra sessioni diverse molto complicato

Page 3: Web Programming e PHP

Pag. 3

Web Programming e PHP

7

Server-side: Programmi esterni

• Queste limitazioni hanno impatto trascurabilequando il server si trova a dover gestire pochepagine dinamiche o ha un basso traffico dirichieste

• L'effetto dell'overhead di attivazione esplodeperò se la maggior parte delle pagine del serversono dinamiche e il traffico di richieste èsignificativo

• L'effetto è quello di mettere in ginocchio sia ilprogramma server sia il sistema operativo delcomputer che lo ospita

8

Server-side: Funzioni interne

• Nel momento in cui l'efficienza diventa il vincoloprincipale, il server deve eliminare l'overhead diesecuzione introdotto dal S.O., realizzando luistesso le funzioni richieste al programmaesterno

• Di nuovo sono di fronte a due scelte, dipendentidalle possibilità offerte dal S.O.:– implementare le funzioni direttamente nel core del

programma– ricorrere all'uso di librerie dinamiche

9

Server-side: Funzioni interne

• L'implementazione nel core è tipicamente menoflessibile, dal momento che ogni modifica allefunzioni richieste implica un ricompilazione delprogramma completo

• L'uso di librerie dinamiche permette unagestione meno monolitica del server, al costodell'overhead di accesso alle funzioni esterne,notevolmente minore in ogni caso dell'overheaddi esecuzione di un processo separato

Page 4: Web Programming e PHP

Pag. 4

Web Programming e PHP

10

Gestione client-side

• Le possibilità di manipolare client-sidel'informazione rappresentata viene tipicamenteimplementata tramite l'uso di funzioniJavaScript (o linguaggi equivalenti)

• Un programma associato alla pagina web (e quindideciso dal server) viene eseguito dal browser(ovvero dal client), alterando il contenuto ol'aspetto della pagina

• L'effettiva fruibilità dell'informazione dipendedelle capacità del browser e dal fatto chel'utente abbia abilitato tali funzionalità

11

Documenti temporizzati• Chiamiamo qui 'documenti temporizzati' dei documenti

che si modificano mentre l'utente li sta osservando(senza interagire con il browser)

• Si tratta di una delle più semplici forme di dinamismoottenibili

• Un approccio client-side consiste nello sfruttare leinformazioni del tag <META>, con l'attributo HTTP-Equivposto a 'Refresh', per ricaricare periodicamente lastessa pagina (che nel frattempo può essere cambiata) oper concatenare più pagine (sconsigliato)

• Un approccio server-side può essere ottenuto usando unprogramma CGI che fornisca i dati ad intervalli e inmaniera particolare (non-parsed header) costringendo ilserver a mantenere aperta la connessione HTTP

12

SSI: Server Side Include

• Quando l'informazione dinamica da includere neldocumento è minima o costituisce solo una frazionedel documento HTML, si ricorre spesso ad uncostrutto chiamato 'Server Side Include'

• Il server 'legge' il file HTML prima di servirlo, allaricerca di direttive indicanti operazioni daeffettuare sul contenuto

• Nel server HTTP Apache (cui facciamo riferimento)tali direttive sono contenute in commenti HTML perpermettere la rappresentazione della pagina anchequando SSI non è attivo

Page 5: Web Programming e PHP

Pag. 5

Web Programming e PHP

13

SSI: Sintassi• La sintassi di SSI è molto semplice <!--#element attribute=value attribute=value ... -->

• SSI permette di mostrare il valore di una variabile disistema

<!--#echo var="DATE_LOCAL" -->

oppure la data di modifica di un fileDocumento modificato <!--#flastmod file="index.html" -->

• L'uso più comune è per includere il risultato di CGI, adesempio un contatore di accessi<!--#include virtual="/cgi-bin/counter.pl" -->

14

SSI: Sintassi• SSI permette anche di eseguire programmi esterni (non

necessariamente CGI)<!--#exec cmd="ls" -->

o di dichiarare variabili<!--#set var="name" value="Maurizio" -->

cui far riferimento altrove, ad esempio nelle istruzionicondizionali (#if, #elif, #else e #endif)

• SSI impone un duplice onere al server: leggere ildocumento prima di spedirlo ed eventualmente eseguirecome processi separati i CGI

• L'elaborazione di SSI è per questo spesso limitata aidocumenti con estensione particolare (ad esempio .shtml)

15

SSI: Esempio<HTML><HEAD><TITLE>Documento SSI</TITLE></HEAD><BODY><h1>La mia pagina SSI</h1><!--#set var="author" value="munafo" --><!--#set var="categoria" value="rapporto,altro" --><pre><!--#include virtual="/cgi-bin/printenv.pl" --> </pre><hr><pre><!--#printenv --></pre><hr>Data corrente: <!--#echo var="DATE_GMT" --><br><!--#if expr="$author = 'munafo'" --><p>Salve Mr. Munaf&ograve;</p><!--#else --><p>Salve sconosciuto</p><!--#endif --></BODY></HTML>

Page 6: Web Programming e PHP

Pag. 6

Web Programming e PHP

16

HTML Pre-processing

• Un approccio server-side più potente delle sempliciSSI è l'uso di meccanismi di pre-processing

• In questo caso il documento da servire non è piùHTML ma un programma vero e proprio in unlinguaggio di programmazione adeguato, che devevenire interpretato prima che la pagina possaessere servita

• Anche in questo caso il preprocessamento puòessere effettuato dal server stesso o demandatoad un programma esterno

17

HTML Pre-processing

• Il ricorso al preprocessamento è utile, ad esempio,quando occorre inserire informazione (anche nondinamica) in una struttura di documentopredefinita, un 'template' da applicare a tutto ilsito senza dover fisicamente cambiare tutti idocumenti in esso contenuti.

• Alcuni linguaggi di pre-processing fornisconoinoltre funzioni di accesso a data base e dicomunicazione che permettono la creazione didocumenti a ricco valore aggiunto (front-end pere-mail, agende on-line, front-end per data-base)

18

DHTML

• DHTML rappresenta una soluzione client-sideper la rappresentazione dinamica dei documenti

• Dynamic HTML è fondamentalmente unamodalità di manipolazione dell'aspetto graficodella pagina tramite JavaScript e la generazionedinamica di elementi della pagina

• JavaScript ha accesso a quasi tutti gli elementidel documento e può alterarne l'aspetto e laposizione (tramite gli attributi di stile) e ilcontenuto (generando testo all'interno deglielementi)

Page 7: Web Programming e PHP

Pag. 7

Web Programming e PHP

19

DHTML

• DHTML viene quindi spesso usato per crearesistemi di menu dinamici

• L'approccio generale si basa sul posizionamentoassoluto sullo schermo di blocchi HTML(ad esempio <DIV>), controllato da eventi utentequali il passaggio del mouse in aree predefinite.

• Il problema fondamentale è che ogni browserimplementa questi controlli in maniera diversarendendo complessa la scrittura di programmivalidi sia per IE che per Netscape

20

PHP: Hypertext Preprocessor

• PHP è uno dei linguaggi di preprocessing piùdiffusi

• Permette di elaborare pagine che contengonocomandi HTML mescolati con istruzioni PHP, percreare documenti dinamici

• Può operare sia come CGI sia integrato nel Webserver

• Se integrato nel server, richiede che le paginesiano identificate da un'estensione adeguata (adesempio .php o .php3) per distinguerle dainormali documenti

21

PHP: Istruzioni

• Le istruzioni PHP possono essere contenute neldocumento HTML in diverse modalità:– tra '<?php' e '?>' (istruzione di processing SGML)– tra <script language='php'> e </script>– tra '<?' e '?>' (short tags)– tra '<%' e '%>' (ASP tags)

• I primi due modi sono sempre attivi e dapreferire; gli altri sono configurabili

• Per PHP tutto quello che sta all'esterno dei tagviene riprodotto in uscita

Page 8: Web Programming e PHP

Pag. 8

Web Programming e PHP

22

PHP: Instruzioni

• Le istruzioni sono separate dal ';', che puòessere omesso prima del tag di chiusura

• In un file PHP i commenti possono essere inseritiin formato C++, C e Shell:– $a = 1 ; // Questo e' un commento C++– $a = 1; /* Questo e' un commento C */– $a = 1; # Questo e' un commento Shell

23

PHP: Tipi

• PHP supporta diversi tipi nativi di dati• Scalari:

– Boolean: assume valore 'True' o 'False'– Integer: valori interi con segno su 32 bit– Float: valori floating-point in doppia precisione– String: sequenze di caratteri a 8 bit

• Composti:– Array: array associativi di elementi– Object: oggetti

24

PHP: Array

• Gli array PHP sono associativi, ovvero liste dicoppie chiave-valore$a = array ("nome" => "Maurizio", "cognome" => "Munafo'");$elenco = array (1,4,"prova",1.5);

• Il contenuto di un array può essere eterogeneo• Se non si indica la chiave esplicitamente, viene

usata come chiave una numerazione progressiva$elenco = array (0=>1,1=>4,2=>"prova",3=>1.5);$vet = array(10=>"red","blue","green","giallo"=>"yellow");

• Si accede agli elementi dell'array tramite [ ]$colore = $vet[12]; // $colore vale "green"$vet["rosa"] = "pink";

Page 9: Web Programming e PHP

Pag. 9

Web Programming e PHP

25

PHP: Variabili

• PHP non assegna un tipo predefinito alle variabilima il loro tipo dipende dal contesto in cui sonousate o assegnate

• Le variabili sono identificate dal nome precedutodal carattere $ e sono case-sensitive– $a = $b * 5.0;– $Messaggio = "Questo e' un messaggio";

• I nomi delle variabili iniziano con una lettera o ununderscore e seguiti da un numero qualsiasi dilettere, numeri e underscore.

26

PHP: Variabili predefinite

• PHP predefinisce alcune variabili dipendenti dalcontesto in cui viene usato:– Variabili del server: hanno il nome e contengono i tipici

valori passati dal server ad un programma CGI– Variabili di ambiente– Variabili PHP: sono definite da PHP e contengono

tipicamente le informazioni ricevute dal server nelmessaggio di richiesta (Cookies, POST, GET, ecc.)

• Queste variabili hanno tipicamente un nometutto maiuscolo o iniziano per '_' ($_COOKIE,$QUERY_STRING)

27

PHP: Variabili predefinite

• L'elenco esatto delle variabili predefinitedipende da molti fattori, come il tipo di server ole funzionalità compilate insieme a PHP

• Il modo più semplice per conoscerle tutte èquello di usare la funzione phpinfo()<?php

phpinfo()?>

• Questo produce una pagina HTML con tutti i datirelativi a PHP, alla sua configurazione e allevariabili predefinite

Page 10: Web Programming e PHP

Pag. 10

Web Programming e PHP

28

PHP: Variabili

• Le variabili booleane sono semplicementedefinite assegnando loro il valore True o False, ocome risultato di operazioni di confronto.

• Nelle conversioni tra tipi, oltre a False, sonoconsiderati falsi 0, 0.0, "", "0", un array o unoggetto con zero elementi e il valore NULL

• Tutti gli altri valori sono considerati veri

29

PHP: Costanti

• Una costante è una variabile il cui nome non èpreceduto dal carattere $ e risulta visibile inogni punto del programma

• Le costanti sono dichiarate tramite tramite lafunzione define() e non possono più esseremodificate.define("PI",3.1415);echo PI;define("VERO",1,true); # Definisce VERO case-insensitive

• È possibile verificare se una costante esiste conla funzione defined()

30

PHP: Operatori

• PHP supporta i tipici operatori matematici deimoderni linguaggi di programmazione

• Tra gli operatori particolari:– '===' restituisce TRUE se gli operandi hanno lo stesso

valore e lo stesso tipo– '!==' restituisce TRUE se gli operandi sono diversi o

hanno tipo diverso– '.' e '.=' permettono la concatenazione di stringhe– '@' intercetta eventuali errori sulle espressioni,

sopprimendo la stringa di errore

Page 11: Web Programming e PHP

Pag. 11

Web Programming e PHP

31

PHP: Strutture di controllo

• Oltre alle tradizionali strutture di controllo(if…elseif…else, while, do…while,for, switch,break, continue) ci sono alcuni costruttiparticolari

• 'foreach' permette di ciclare sui valori di unarray (associativo):– foreach (array as $value) …– foreach (array as $key => $value) …

32

PHP: Strutture di controllo

• Per facilitare l'inclusione di codice PHP in HTML,è possibile nei blocchi dopo le istruzioni if, while,for, foreach e switch sostituire la parentesi cheapre il blocco con il carattere ':' e la parentesidi chiusura con l'istruzione end<istruzione>;<?php if ($var == 10) : ?>La variabile e' uguale a 10<?php else : ?>La variabile e' diversa da 10<?php endif; ?>

33

PHP: Inclusione file

• Il codice PHP può essere strutturato in filedifferenti che poi sono inclusi e valutati tramitele istruzioni 'require' e 'include'<?phprequire "file.inc";?>

• Le variabili globali (e quindi anche quelle dei fileinclusi) non sono visibili direttamente all'internodelle funzioni definite dall'utente e vannodichiarate esplicitamente tramite 'global'

Page 12: Web Programming e PHP

Pag. 12

Web Programming e PHP

34

PHP: Funzioni

• Le funzioni sono definite tramite la parola chiave'function' e supportano il passaggio di parametriper valore, per riferimento (tramite &$par), ladefinizione di valori di default e un numerovariabile di parametrifunction prepara_bevanda ($tipo = "chinotto") { echo "Ho voglia di bere un bicchiere di ".$tipo;

}

35

PHP: Funzioni di libreria

• PHP supporta un elevato numero di funzioni dilibreria per i compiti più disparati

• Vediamo alcune tra le funzioni più comuni o diinteresse:– echo stringa [, stringa...]– print stringa [, stringa…]

permettono la stampa in output di stringhe, anche multiriga.Supportano gli "here document" con iterpolazione delle variabili

tramite il costrutto '<<<'echo <<<TERMINATOREQuesto e' un messaggio "multiriga" in cui levariabili vengono espanse (\$a = $a)TERMINATORE;

36

PHP: Funzioni di libreria– header(), setcookie()

se usate prima di qualsiasi output, permettono di indicareheader HTTP o cookies da mandare nella risposta. Eventualicookies ricevuti dal client sono reperibili negli array globali$_COOKIE e $HTTP_COOKIE_VARS

– die(), exit()terminano il programma con un messaggio

– fopen(), fclose(), fread(), fgets() …gestione di file. È possibile aprire file locali o URL, anche se

l'accesso a URL remoti può essere limitato da configurazione$fp = fopen ("/home/rasmus/file.gif", "wb");

$fp = fopen ("http://www.php.net/", "r");

$fp = fopen ("ftp://user:[email protected]/", "w");

Page 13: Web Programming e PHP

Pag. 13

Web Programming e PHP

37

PHP: Funzioni di libreria– date()

stampa una data secondo diversi formati configurabili– exec(), system()

eseguono programmi esterni, eventualmente catturandonel'output. Una funzione simile è ottenibile usando i backtick(`comando`)

– list()tratta i suoi argomenti come se fossero parte di un array

– sort(), rsort(), in_array(), key(), each(), array_xxx()…esistono tutta una serie di funzioni per l'ordinamento,

l'attraversamento o la gestione degli array

38

PHP: Accesso a database

• Uno dei principali motivi della diffusione e delsuccesso di PHP è la sua capacità supportarel'accesso ad un elevato numero di database o disistemi per il mantenimento dati

• Esiste supporto PHP per l'accesso a databaseSQL (MySQL, PostgreSQL, msql, Oracle, ODBC),database 'piatti' (DBM), messagistica (IMAP,POP3 e NNTP), servizi di directory (LDAP)

39

Esempio: Effetto simil-SSI<?php $author='munafo'; $categoria='rapporto,altro'; ?><HTML><HEAD><TITLE>Documento PHP</TITLE></HEAD><BODY><h1>La mia pagina PHP</h1><hr><pre><?phpforeach ($HTTP_SERVER_VARS as $key =>$value) echo "$key=$value\n";?></pre><hr>Data corrente: <?php echo gmdate("l, d-M-Y G:i:s T",mktime());?><br><?php if ($author == 'munafo') : ?><p>Salve Mr. Munaf&ograve;</p><?php else: ?><p>Salve sconosciuto</p><?php endif; ?></BODY></HTML>

Page 14: Web Programming e PHP

Pag. 14

Web Programming e PHP

40

Esempio: Operatori di uguaglianza<HTML><HEAD><TITLE>Documento PHP</TITLE></HEAD><BODY><h1>Test operatori</h1><pre>$a = 10$b = 20$c = "10"$d = 10---<?php $a = 10; $b = 20; $c = "10"; $d = 10; if ($a == $c) echo "\$a == \$c\n"; if ($a != $b) echo "\$a != \$b\n"; if ($a === $c) echo "\$a === \$c\n"; if ($a !== $c) echo "\$a !== \$c\n"; if ($a === $d) echo "\$a === \$d\n"; if ($a !== $d) echo "\$a !== \$d\n";?></pre></BODY></HTML>

41

Esempio: Le tabelline (1/2)

<?php

echo <<<EOT<HTML><HEAD><Title>Output di $SCRIPT_NAME</title><STYLE type="text/css"> .odd { background-color: red; color: white} .even { background-color: white; color: red} td { text-align: center ; height: 40; width: 40}</style></HEAD><body><h1>Le tabelline generate da $SCRIPT_NAME</h1>EOT;

42

Esempio: Le tabelline (2/2)echo "<table border>\n";for ($i = 1; $i<=10; $i++) { echo "<tr>"; for ($j = 1; $j<=10; $j++) { $factor = $i*$j; $classe = ($i%2 xor $j%2) ? "odd" : "even"; echo "<td class='$classe'>$factor</td>\n"; } echo "</tr>\n"; }echo "</table>\n";

echo <<<EOT</body></HTML>EOT;?>

Page 15: Web Programming e PHP

Pag. 15

Web Programming e PHP

43

Esempio: Crivello di Eratostene (1/3)

<?php

function check_prime($num) { if ($num == 1 || $num == 2 || $num == 3 ) return true; if ($num%2 == 0) return false; for ($i=3;$i<=sqrt($num);$i+=2) if ( $num % $i == 0) return false; return true; }

44

Esempio: Crivello di Eratostene (2/3)

echo <<<EOT<HTML><HEAD><Title>Output di $SCRIPT_NAME</title><STYLE type="text/css"> .prime { background-color: blue; color: white} .notprime { background-color: white; color: blue} td { text-align: center ; height: 40; width: 40}</style></HEAD><body><h1>I numeri primi controllati da $SCRIPT_NAME</h1>EOT;

45

Esempio: Crivello di Eratostene (3/3)echo "<table border>\n";for ($i = 0; $i<10; $i++) { echo "<tr>"; for ($j = 0; $j<10; $j++) { $number = $i*10+$j+1; $primo = check_prime($number) ? "prime" : "notprime"; echo "<td class='$primo'>$number</td>\n"; } echo "</tr>\n"; }echo "</table>\n";echo <<<EOT</body></HTML>EOT;?>

Page 16: Web Programming e PHP

Pag. 16

Web Programming e PHP

46

Esempio: Gestione Cookie<?php$count = $TestCookie ? $TestCookie+1: 1;$count2 = $TestCookie2 ? $TestCookie2+1: 1;// TestCookie vale solo per la sessione corrente// TestCookie2 vale per 5 minutisetcookie("TestCookie",$count);setcookie("TestCookie2",$count2,time()+600);?><HTML><Head><Title>Test Cookies</TITLE></HEAD><BODY><h1>Benvenuto al test di funzionamento dei cookie</h1><?phpecho "<p>Possiedi i seguenti cookie:<ul>";foreach ($HTTP_COOKIE_VARS as $key => $cookie) echo "<li>$key = $cookie\n";echo "</ul><p>Arrivederci";?></body></html>

47

Esempio: Cookie e Berkeley DB (1/3)<?php $utente = $HTTP_COOKIE_VARS["IDUtente"] ?

$HTTP_COOKIE_VARS["IDUtente"] : md5(uniqid("")); setcookie("IDUtente",$utente,time()+3600); $db = @dba_open ("userdb.db", "c", "db2") or die("Errore in

dba_open"); if (dba_exists ($utente, $db)) { $status = dba_fetch ($utente, $db); } else { $status = ":"; dba_insert ($utente, $status,$db); } list($count,$count2) = split (':',$status);?>

48

Esempio: Cookie e Berkeley DB (2/3)<HTML><Head><Title>Test Cookies e DBM</TITLE></HEAD><BODY><h1>Benvenuto al test su DBM e cookie</h1><?php echo "<p>Possiedi i seguenti cookie:<ul>"; foreach ($HTTP_COOKIE_VARS as $key => $cookie) echo "<li>$key = $cookie\n"; echo <<<EOT</ul><p>Sei l'utente $utente e il tuo stato &egrave;<ul><li> Contatore 1: $count<li> Contatore 2: $count2</ul><p>ArrivederciEOT;

Page 17: Web Programming e PHP

Pag. 17

Web Programming e PHP

49

Esempio: Cookie e Berkeley DB (3/3)

$count++; $count2+=2; $status = $count .":". $count2; dba_replace ($utente, $status, $db); dba_close ($db);?></body></html>

50

Esempio: Gestione sessioni (I)<?phpsession_start();if (isset($_SESSION['count'])) { $_SESSION['count']++;}else { $_SESSION['count'] = 0;}?>

Hello visitor, you have seen this page <?php echo $_SESSION['count'];?> times.<p>

To continue, <A HREF="session.php?<?php echo SID?>">click here</A><?php session_write_close(); ?>

51

Esempio: Gestione sessioni (II)<?phpsession_start();if (!session_is_registered('sess_user')) { session_register("sess_user"); session_register("count"); session_register("list"); $sess_user = "Ubaldo"; $count = 0; $list = array ();}else { $count++; array_push ($list,rand(1,20));}?>Hello <?php echo $sess_user;?>, you have seen this page <?php echo $count; ?>

times.<p>Your list is now $list=(<?php echo join(",",$list)?>)<p>To continue, <A HREF="session.php">click here</A><?php session_write_close(); ?>

Page 18: Web Programming e PHP

Pag. 18

Web Programming e PHP

52

Esempio: Stampa sorgente<?phpheader("Content-type: text/plain");// $input viene ottenuto come una variabile CGIif (is_file($input) && is_readable($input)) { $fd = @fopen ("$input", "r") or die ("Errore apertura file: il messaggio è '$php_errormsg'"); while (!feof ($fd)) { $buffer = fgets($fd, 4096); echo $buffer; } fclose ($fd); }else { echo "Inserire input=nomefile"; }?>

53

Esempio: Lettura file remoto

<?php// legge un file locale o remoto e lo manda sull'outputreadfile ("http://localhost/");?>

<?php// legge un un file locale o remoto in un array$data = file ("http://localhost/");foreach ($data as $row) echo $row;?>

54

Esempio: Connessione socket (1/2)

<?php// header("Content-type: text/plain");$data = array();$fp = fsockopen ("localhost", 80, $errno, $errstr, 30);if (!$fp) { echo "$errstr ($errno)<br>\n";} else { fputs ($fp,"GET / HTTP/1.0\r\n Host:panzerotto.polito.it\r\n\r\n"); while (!feof($fp)) { array_push($data,fgets ($fp,4096)); } fclose ($fp);}

Page 19: Web Programming e PHP

Pag. 19

Web Programming e PHP

55

Esempio: Connessione socket (2/2)

$empty = false;foreach ($data as $row) { if ($empty) echo $row;

if (rtrim($row) == "") { $empty = true; }}?>