I colori hanno un puro scopo di aiuto per identificare meglio i tags PHP e le differenti sezioni di un'istruzione. Da notare inoltre che non ci troviamo di fronte ad uno script CGI, dato che questo listato non ha bisogno in alcun modo di essere eseguibile o altro di particolare. Come gia' detto ci troviamo di fronte ad un comune file HTML (notare i tag classici <html> e <body> all'inizio/fine della pagina), con l'aggiunta di tag "estranei" speciali.
<html><head><title>PHP Test</title></head>
<body>
<?php echo "Hello World<P>"; ?>
</body></html>
In questo caso lo script e' molto semplice e serve solo da esempio, in quanto si poteva fare la stessa cosa tranquillamente senza il php utilizzando HTML. Il risultato di questa pagina e':
Hello World
Se avete provato questo esempio e non ha funzionato, e' probabile che
il server non ha il PHP abilitato. Per chiarimenti
o per l'attivazione contattate l'amministratore.
Ad esempio con il browser che state utilizzando ora per vedere questa pagina, il risultato e' questo:
<?php echo $HTTP_USER_AGENT; ?>
Al momento della visualizzazione della pagina .php3 con questa istruzione, il server restituira' al browser una pagina web con la lista di tutte le variabili disponibili (per un esempio andate alla fine di questo tutorial).
<?php phpinfo()?>
Fino ad ora abbiamo visto solamente istruzioni singole, ma e' possibile anche raccogliere piu' istruzioni PHP in piccoli "blocchi", cosi' da poter fare degli script piu' elaborati. Per esempio, rifacendoci all'esempio del controllo del tipo di browser, se volessimo controllare nello specifico se si sta usando Internet Explorer (e magari consigliare chi lo sta usando a cambiare :P) potremmo scrivere questo:
A questo punto pero' e' necessario introdurre un po' di nuovi concetti. Innanzitutto abbiamo l'istruzione " if ". Se avete un po' di pratica con la sintassi di C questo listato risultera' comprensibile. Se non avete familiarita' col C (o altri linguaggi con sintassi simile a questa), la cosa migliore sarebbe leggere i primi capitoli di un semplice manuale introduttivo al C. Tutti i problemi di operazioni su stringhe e memoria che si possono avere in C sono stati esclusi dal PHP, ma la sintassi di base rimane comunque la stessa.
<?php
if(strstr($HTTP_USER_AGENT, "MSIE")) {
echo "You are using Internet Explorer (Micro$oft thanks you!) <br>";
}
?>
Il secondo concetto che occorre introdurre e' la funzione strstr(),
una funzione interna del PHP che cerca in una
determinata stringa (nel nostro caso quella memorizzata nella variabile
$HTTP_USER_AGENT) un' altra stringa
(o piu' semplicemente una parola e/o frase in questo caso, ovvero MSIE).
Se la stringa viene trovata la funzione
restituisce il valore "true" (vero), altrimenti restituisce
"false" (falso). Se la ricerca va a buon fine (quindi la funzione
resituisce "true") vengono eseguite le istruzioni subito successive.
Volendo, a questo punto potremmo "ampliare" l'esempio di prima, per mostrare la flessibilita' del PHP vedendo con quale facilita' e' possibile passare dalla modalita' PHP (istruzioni PHP ) a quella normale (html semplice) e viceversa all'interno di uno stesso blocco di istruzioni PHP (regolato in questo caso dall' " if " e aperto dal primo tag <?php):
Invece di usare l'istruzione echo per generare l'output dello script, siamo "usciti" dalla modalita' PHP inserendo solo puro e semplice codice HTML. Tutto questo per dimostrare una caratteristica importantissima: il flusso dello script e' rimasto intatto. Solo uno dei due blocchi HTML viene eseguito (a seconda del risultato dell'istruzione if ). Il risultato a video di questo script, con il browser che state utilizzando, ora e' il seguente:
<?php
if(strstr($HTTP_USER_AGENT, "MSIE")) {
?>
<center><b>You are using Internet Explorer</b></center>
<?
} else {
?>
<center><b>You are not using Internet Explorer</b></center>
<?
}
?>
In questo form non c'e' nulla di particolare. E' un semplicissimo form HTML senza speciali tag, in cui l'utente scrive nelle due caselle di input il suo nome e l'eta', per poi inviare i dati. Premuto il bottone submit viene chiamata la pagina
<form action="action.php3" method="POST">
Your name: <input type=text name=name>
You age: <input type=text name=age>
<input type=submit>
</form>
A questo punto dovrebbe essere ovvio il funzionamento ed il risultato di questo esempio. Non c'e' nulla da aggiungere. Infatti e' da notare in particolare come il contenuto dei campi input "name" e "age" viene assegnato dal PHP automaticamente alle variabili omonime $name ed $age (che poi vengono come al solito visualizzate da echo), senza bisogno di nessun altra istruzione.
Hi <?php echo $name?>. You are <?php echo $age?> years old.
Inanzitutto comincerei da uno dei primi esempi proposti dal tutorial,
ovvero l'individuazione del browser e le variabili
del server. Per maggior chiarezza suggerirei di provare ad aggiungere
questo alla prima pagina hello.php3
e leggerne l'output risultante (chiaramente dopo
averla rimessa sul server .... dall'hard disk probabilmente non
vedreste nulla), per farvi un'idea di cosa/quali/quante
siano le variabili di server disponibili, in quanto alcune saranno utilizzate
nel prossimo esempio. Con questo listato potete visualizzare su una pagina
alcune caratteristiche utili circa il server ed il client in uso, grazie appunto
ad alcune variabili http:
<font size=+3> Dati server : </font>
<br>
<br>
<br>
<b>Amministratore : </b> <?php
echo $SERVER_ADMIN;
?>
<br><b>Sistema : </b> <?php
echo $MACHTYPE;
?>
<br><b>Software : </b> <?php
echo $SERVER_SOFTWARE;
?>
<br><b>Host : </b> <?php
echo $HOSTNAME;
?>
<br><b>Server : </b> <?php
echo $HTTP_HOST;
?>
<br><b>Porta : </b> <?php
echo $SERVER_PORT;
?>
<br><b>Protocollo : </b> <?php
echo $SERVER_PROTOCOL;
?>
<br>
<br>
<font size=+3> Dati client : </font>
<br><b>Indirizzo IP : </b> <?php
echo $REMOTE_ADDR;
?>
<br><b>Host : </b> <?php
echo $REMOTE_HOST;
?>
<br><b>Sistema : </b> <?php
echo $HTTP_USER_AGENT;
?>
<br><b>Porta : </b> <?php
echo $REMOTE_PORT;
?>
<br>
<br>
<br>
Come poteve vedere lo script e' molto semplice
.... e' uguale a quello d'esempio nel tutorial, solo che "abbellito"
con altri dati interessanti ottenuti dalle variabili
del server. Per il risultato di tutto questo (che non ho volutamente
inserito in questa pagina) provate ad inserirlo
in una vostra pagina html e vedere il risultato .... sicuramente potra'
essere d'effetto sulla vostra home.... inoltre e' un modo come un altro
per invitarvi a "studiarlo" senza limitarvi all'inutile copia/incolla.
;)
<br><b>Accessi totali ottenuti da questa
pagina </b> :
<?php
$contatore = "/mia/dir/su/server/web/mio_file.txt";
function conta($contatore)
{
$aprif = fopen($contatore,"r+");
$hits = fgets($aprif,
16);
$hits += 1;
print("$hits
\n");
rewind($aprif);
fputs($aprif,$hits);
fputs($aprif,"\n");
fclose($aprif);
}
conta($contatore);
?>
Dato che gia' e' stato spiegato prima, si presuppone che almeno un minimo base di conoscenza informatica ci sia .... in ogni caso cerchero' di essere il piu' chiaro e semplice possibile. Innanzitutto avrete notato che tutto il listato "critico" php e' all'intenro di un blocco delimitato da function { e }. Senza dilungarsi troppo, diciamo subito che una funzione non e' altro che un blocco di istruzioni che puo' essere eseguito ogni qualvolta si vuole, quindi se io voglio eseguire tutta questa serie non la riscrivero' tutta di nuovo ma bastera' chiamare la funzione e magicamente tutto il listato racchiuso nella funzione verra' eseguito. In questo caso l'istruzione di creazione della funzione e'
function conta($contatore) {
ovvero definisco il nome della funzione ("conta" in questo caso) e poi passo un parametro esterno (non e' una cosa obbligatoria ..... se lo avessi strutturato diversamente avrei potuto scrivere function conta() ). Il parametro che passiamo alla funzione in questo caso e' la prima istruzione in php dopo il tag <?php di apertura dei comandi php. La prima istruzione $contatore = "/mia/dir/su/server/web/mio_file.txt"; non fa altro che assegnare alla variabile $contatore il nome (completo di percorso di ricerca per sicurezza) del file che useremo per memorizzare il numero attuale di accessi; tutto cio' ci sara' comodo quando, dovendo fare riferimento ancora a quel file, invece di riscrivere tutto il path/nomefile scriveremo solamente $contatore. L'istruzione successiva e'
$aprif = fopen($contatore,"+r");
che "apre" il file $contatore con il comando fopen(nomefile, modalita'); (sarebbe piu' preciso parlare di puntatori, ma per ora tralasciamo.... magari prima o poi vi parlero' anche di quelli) in modalita' +r (ovvero lettura/scrittua... il che vuol dire che avremo anche potuto aprirlo ad esempio in modo sola-lettura "r", o sola scrittura "w" e non finisce qua ... per ora accontentiamoci :D). Da notare anche che tutto il risultato (cioe' il file aperto) e' assegnato alla variaible $aprif (analogamente a quanto fatto per la var $contatore). Una volta aperto il file bisogna naturalmente leggerlo (in questo caso dovrete la prima volta creare un semplice file di testo e scriverci il numero di partenza del contatore...e non barate!). Ora per leggerlo correttamente, dato che abbiamo creato un file di una sola riga e con un numero e basta ma potrebbe non essere sempre cosi' semplice, bisognera' dire allo script di andare a leggere *proprio li'* (anche se gia' lo abbiamo fatto con la modalita' +r che apre il file "puntando" all'inizio, cioe' proprio quello che serve a noi). Dunque eccoci arrivati al momento di "leggere" il valore contenuto nel nostro file
$hits = fgets($aprif, 16);
Oramai dovrebbe essere abbastanza intuitivo.. con fgests(puntatore-file, "lunghezza"); non faccio altro che leggere la riga dove si trova il nostro puntatore (nel nostro caso all'inizio del file con la modalita' +r), puntatore che prima abbiamo assegnato alla variabile $aprif. Il tutto come sempre viene assegnato ad una variabile. Il parametro che io ho chiamato "lunghezza" non fa altro che dire fino a dove leggere... infatti fgets leggera' n-lunghezza bytes e li' si fermera', a meno che prima non incontri un carattere \n (newline) o un EndOfFile (spero siano intuitivi i significati di queste cose). Ora il grosso e' stato fatto .... con le istruzioni $hits += 1; print("$hits \n"); rewind($aprif); non facciamo altro che incrementare di 1 il valore letto dal file (ed assegnato prima ad $hits) , poi lo stampiamo a video e "riavvolgiamo" il puntatore (che sara' andato a capo dato che abbiamo dato anche il carattere \n newline) facendolo tornare all'inizio del file (con rewind, come nelle videocassette), per poter scrivere il nuovo valore su quello vecchio con fputs($aprif,"\n"); (la sintassi sarebbe fputs(puntatore-file, stringa da scrivere, "lunghezza"); , ovvero noi scriviamo nel nostro file aperto ed assegnato ad $aprif il nuovo valore di $hits tralasciando volutamente il parametro "lunghezza", analogo a quello di fgets, senza il quale fputs scrive l'intera stringa (linea)). A questo punto non ci resta che "chiudere" il nostro file-puntatore con fclose($aprif); , chiudere il blocco di istruzioni della funzione con } ed infine far si' che la nostra funzione.......funzioni! ( "chiamandola" con conta($contatore); ... notare il ; alla fine di ogni istruzione e la chiamata alla funzione con la nostra variabile $contatore, che essendo stata volutamente dichiarata fuori della funzione deve essere passata a quest'ultima). Il vostro contatore e' pronto per entrare in funzione!
Bene .... per ora e' tutto ... spero di esservi
stato in qualche modo di aiuto e di non avervi confuso troppo le idee...
prevedo di aggiungere nuove cose (php e non)
a questo spazio.... per consigli e/o errori/imprecisioni scrivere a
info@bluecodes.com
Traduzione italiana, aggiunte, modifiche (c) 1999
by rofus
Ultimo aggiornamento: 15/1/1999