Php è un potente linguaggio di web scripting opensource.
Esso è compatibile con tutti i più famosi server Web, ma sicuramente si sente a casa propria a lavorare con Apache.
Php gira su la gran parte degli Unix e su Windows.
Come già detto esso è compatibile con Apache per Unix e Windows, nonchè con Microsoft Internet Information Server e Netscape Enterprise Server; oltre a questi popolarissimi webserver è compatibile con altri meno conosciuti e diffusi, quali ad esempio AOLServer e fhttpd.
Il codice php può essere incluso in normali pagine html: successivamente esso viene interpretato dall'interprete php ed inviato al browser dell'utente.
--
1.1 Installazione
Installazione di PHP + Apache sotto Win
Questo documento spiega semplicemente come installare e configurare apache e php su un sistema windows.
Installazione di PHP + Apache - Sistemi Unix/like
Innanzitutto bisogna procurarsi i sorgenti di Php ed Apache
tar xvfz apache_x.y.z.tar.gz
tar xvfz php-x.y.z.tar.gz
Configuriamo apache:
cd apache_x.y.z
./configure --prefix=/usr/local
E php:
Copiamo il file php.ini:
cd php-x.y.z
./configure --with-apache=/percorso/completo/apache_x.y.z --enable-track-vars --with-xml
make
make install
Ancora apache:
cp php.ini-dist /usr/local/lib/php.ini
E, finalmente, ultimo passo - decommentiamo le seguenti righe in /usr/local/apache/conf/httpd.conf ./configure --prefix=/usr/local/apache \
--activate-module=src/modules/php4/libphp4.a
make
make install
Lanciamo apache:
AddType application/x-httpd-php .php .php3 .phtml
AddType application/x-httpd-php-source .phps
Ok, dovremmo essere a posto!
apachectl start
--
LINUX:
--
--
--
1.2 Editor
Per programmare è sempre necessario uno strumento: l'editor di testi.
Ovviamente questo è vero anche per PHP :).
Per quanto riguarda Windows il fido blocco note potrebbe andare bene per iniziare.
Ma probabilmente, dopo un pò di esperienza, diventerete semi-pazzi a scrivere script di righe e righe, magari confondendo le parole risvervate del php con i commenti etc...
Per questo è molto conveniente utilizzare un editor con syntax highlight, ovvero la colorazione della sintassi.
Esempio di codice con sintassi colorata:
<HTML>
<HEAD>
</HTML>
<TITLE>
Questo è un esempio di syntax highlight
</TITLE>
</HEAD>
Di seguito viene presentata una breve lista di editor.
WINDOWS:
1.3 Hello world!
Ed eccoci al nostro primo programma in PHP.
Armati di un editor scriviamo quanto segue:
Salviamo questo piccolo scriptino con (ad esempio) il nome index.php nella directory root del nostro web server.
<HTML>
<HEAD>
<TITLE>Ciao Mondo!</TITLE>
<BODY>
<?php // questo è il tag che segnala l'inizio del codice php
echo "Hello World";
?> /* e questo è il tag che segnala la fine del codice php */
</BODY>
</HTML>
A questo punto possiamo ammirare l'output del nostro primo script php andando con un browser su:
http://ip.del.server/index.php
2.0 Sintassi
Per quanto riguarda la sintassi, se conoscete il C siete già praticamente a posto.
Sono infatti numerose le analogie sintattiche tra i due linguaggi.
In caso contrario, non c'è comunque da preoccuparsi: infatti php non è affatto cattivo.
Trovandosi di fronte a codice poco chiaro, l'interprete cercherà comunque di caprici qualcosa, a differenza di un programma in C, che in caso di errori di scrittura del codice proprio non vuole saperne di compilare.
Ovviamente ci sono alcuni casi in cui l'interprete php non sa proprio che pesci pigliare... :)))
Ma veniamo al dunque:
C'è sempre più di un modo per fare la stessa cosa, in PHP.
Ad esempio, l'inclusione di codice PHP all'interno di una pagina HTML si ottiene nei seguenti modi:
<?php
//codice php, in questo caso un commento
?>
<?
//codice php
?>
<SCRIPT LANGUAGE="php">
//codice php
</SCRIPT>
<%
//codice php
%>
2.1 Separazione delle istruzioni
Ogni istruzione termina con il punto e virgola.
Esempio:
<?php
echo "ciao";
?>
TIPO | COSA CONTIENE | ESEMPIO | CODICE |
integer | Intero | 5 | $intero = 5; |
double | Virgola Mobile | 3.214 | $double = 3.214; |
string | Stringa | "Sono una stringa" | $stringa = "parole parole"; |
$stringa = "4"; | |||
boolean | può assumere il valore di true o false | true | $bool = true; |
array | Gli array meritano un discorso a parte. Eccolo :) |
sono nettamente differenti: nel primo caso variabile conterrà un intero, nel secondo caso una stringa.$variabile = 12; $variabile = "12";
--
--
Questo è dunque corretto:
--
--
--
Le funzioni ci consentono di mantenere più leggibile il nostro script e (nel caso di operazioni che si ripetono più volte) di riutilizzare delle parti di codice che altrimenti dovremmo riscrivere a manina.
2.3.1 Array
Possiamo immaginare un array (vettore) come una cassettiera.
MATERIE
/------------------\
| matematica | 0 |
|------------|-----|
| storia | 1 |
|------------|-----|
| inglese | 2 |
|------------|-----|
| italiano | 3 |
\------------------/
I numeri a fianco ad ogni materia non corrispondono al voto (per fortuna) :)
Rappresentano invece la posizione degli elementi all'interno dell'array.
Il nostro array "materie", contiene ovviamente dei dati di tipo stringa; possiamo quindi dire che materie è un array di stringhe.
Ecco questo concetto tradotto in PHP:
Materie è un array.
$materie = array("matematica", "storia", "inglese", "italiano");
Per accedere ad uno dei "cassetti" è necessario specificarne la posizione.
Ovvero:
Abbiamo assegnato alla variabile una_materia il contenuto "italiano", mentre ad altra_materia il contenuto "storia".
$una_materia = $materie[3];
$altra_materia =$materie[1];
2.4 Caratteri speciali
Abbiamo detto che per indicare una stringa sono necessari i doppi apici (").
Bene, quindi questo è corretto:
e questo?
$stringa = "ciao ciao";
Con tutte le migliori intenzioni abbiamo provato a inserire dei doppi apici all'interno di una stringa.
$stringa = "ciao "john" smith";
Ovviamente, però, così facendo incasiniamo l'interprete PHP, il quale è convinto che la nostra stringa finisca dopo la parola ciao.
Ed ecco dunque che possiamo parlare di escape.
Il carattere di escape in PHP è il backslash (\).
$stringa = "ciao \"john\" smith";
Anteponendo il backslash ad un carattere, evitiamo che PHP cerchi di "lavorarci sopra".
Per esempio:
produce il seguente output:
<?php
echo "micro\$oft è il \"demonio\";
?>
micro$oft è il "demonio"
3.0 Flusso di esecuzione e cicli
Uno script in PHP è una serie di istruzioni, che vengono eseguite una dopo l'altra.
Ma noi vogliamo qualcosa in più, vogliamo poter effettuare una certa cosa solo se si verifica un qualche evento, oppure ripetere la stessa cosa più volte e via di seguito.
Vediamo come si può variare il comportamento del nostro script:
3.1 Istruzioni di scelta (o condizionali)
Istruzione "if"
In questo semplice esempio abbiamo confrontato il valore della variabile "os" (supponendo che in essa fosse stato precedentemente inserito il nome del sistema operativo) con la stringa "Linux".
<?php
if ($os == "Linux")
{
echo "Alè il pinguino!";
}
?>
Nel caso in cui il contenuto di "os" fosse proprio "Linux" otterremmo in output il messaggio "Alè il pinguino!".
E se il contenuto fosse diverso? Ecco subentrare l' else.
Istruzione "else"
In questo caso se $os è uguale a "Linux" l'output sarà Alè il pinguino, altrimenti sarà "Accidenti".
<?php
if ($os == "Linux")
{
echo "Alè il pinguino!";
}
else
{
echo "Accidenti";
}
?>
Istruzione "elseif"
Ipotizziamo di avere, a differenza della situazione precedente, un'altra scelta.
Mi spiego meglio: se il s.o. è linux scriviamo "Alè il pinguino", se è FreeBSD "Alè il diavoletto", altrimenti scriviamo "Accidenti".
<?php
if ($os == "Linux")
echo "Alè il pinguino!";
elseif ($os == "Freebsd")
echo "Alè il diavoletto!";
else
echo "Accidenti";
?>
Parentesi graffe? O no?
In quest' ultimo esempio ho volutamente omesso le parentesi graffe ("{", "}").
Questo perchè, nel caso in cui il blocco di istruzioni da eseguire sia ridotto unicamente ad una istruzione, le parentesi graffe possono essere evitate.
Attenzione però:
La seconda istruzione NON verrà eseguita all'interno dell' if.
<?php
if ($os == "Linux")
echo "Alè il pinguino!"; // prima istruzione
$prova = 2; /*
seconda istruzione, ma
l'if è già terminato !
:((
*/
?>
Il codice corretto per eseguire entrambe le istruzioni nel caso in cui la condizione sia verificata è:
<?php
if ($os == "Linux")
{ // notare la parentesi graffa
echo "Alè il pinguino!"; // prima istruzione
$prova = 2; /* seconda istruzione,
questa volta all'
interno dell'if :))
*/
}
?>
Istruzione "switch"
Se è necessario effettuare parecchi controlli sulla stessa variabile, per evitare di utilizzare una successione interminabile di if, else, elseif, utilizziamo l'istruzione switch.
Esempio:
Molto semplicemente, a seconda del contenuto della variabile "$os", viene eseguito del codice differente.
<?php
switch ($os)
{
case "Linux":
echo "Alè il pinguino";
break;
case "Freebsd":
echo "Alè il diavoletto";
break;
case "Windows":
echo "buuuuuuuuuuuuuuuh";
break;
case "Mac/OS":
echo "Apple";
break;
default:
echo "s.o. non menzionato";
break;
}
?>
Da notare il default. Nel caso in cui nessuno dei case soddisfi il contenuto della variabile, viene eseguito il "default".
3.2 Istruzioni iterative (o cicli)
Ciclo "for"
Il ciclo for ci consente di eseguire più volte lo stesso blocco di istruzioni. Il numero di volte viene definito dalla "condizione di controllo del ciclo".
Finchè essa risulta vera, il for viene ripetuto.
Quindi:
for ($i=0; $i<5; $i++) // for ($i=valore_di_partenza; condizione su $i; istruzione su $i)
{
echo "<BR>";
echo "Alè il pinguino";
}
Il valore di partenza di "$i" è zero.
La condizione che deve essere vera per restare dentro al ciclo è: $i DEVE essere MINORE di 5.
L'istruzione che si verifica ad ogni ciclo è $i++, ovvero l'INCREMENTO della variabile $i.
Il risultato di questo codice è la scritta "Alè il pinguino" ripetuta per 5 volte.
Cicli "while" e "do-while"
Il ciclo while ha la prerogativa del "controllo in testa".
<?php
while ($i < 5)
{
echo "<br>Alè il pinguino";
$i++;
}
?>
La condizione viene verificata prima del blocco delle istruzioni:
se essa non è verificata il blocco delle istruzioni non viene eseguito.
Quindi, di fronte a del codice di questo tipo:
<?php
$i = 10;
while ($i < 5)
{
echo "<br>Alè il pinguino";
$i++;
}
?>
possiamo star certi che la scritta "Alè il pinguino" non comparirà, essendo il valore di $i maggiore di 5 già prima del while.
Invece, il do-while viene anche detto "a controllo in coda".
Il blocco delle istruzioni viene quindi eseguito almeno una volta, e poi, in coda viene verificata la condizione.
Esempio:
In questo caso abbiamo inizializzato $i a 10.
<?php
$i = 10;
do
{
echo "Alè il pinguino";
$i++;
}while ($i < 5);
?>
Inizia il do-while, viene prodotto l'output "Alè il pinguino", viene incrementato il valore di $i e quindi in coda viene verificata la condizione: essendo $i superiore a 5 si esce dal ciclo.
La scritta appare dunque una volta, differentemente da quanto visto poco fa con l'esempio del while.
4.0 Funzioni
Esse risultano veramente comode nel caso di script di dimensioni considerevoli, facilitando la vita del povero sviluppatore.
Possiamo pensare ad una funzione come ad una "scatola", che elabora dei dati ricevuti in input e quindi produce un output.
/----------\
dati in input | | output
-------------> | FUNZIONE | ----->
| |
\----------/
Ecco una funzione che somma due valori.
"a" e "b" sono i valori in input, "c" è il nostro output.
Vediamo la nostra semplice funzione "somma" realizzata in php:
/---------------\
A --> | |
| Somma | C -->
B --> | c = a + b |
| |
\---------------/
Abbiamo dunque creato la funzione "somma", alla quale vengono passati due argomenti, ovvero il primo e il secondo valore da sommare.
<?php
function somma($a,$b)
{
$risultato = $a + $b;
print ("somma = $risultato");
}
/*
richiamiamo la funzione "somma", passando come argomenti
i valori 5 e 12
*/
somma(5,12);
?>
Una funzione può avere uno o più argomenti, cosi come nessuno.
Inoltre, una funzione può restituire un valore.
Per consentire ad una funzione di restituire un valore utilizziamo l'istruzione return.
Facciamo si che l'esempio di prima restituisca la somma:
N.B.
E'importante notare come delle variabili su cui siano state effettuate delle operazioni all'esterno della funzione non sono visibili all'interno della funzione stessa. Esempio:
<?php
function somma($a,$b)
{
return $a+$b;
}
/*
stampiamo "il risultato è:" con il risultato ritornato dal richiamo
della funzione somma
*/
print "Il risultato è:". somma(5,12);
?>
La variabile $nick è stata definita fuori dalla funzione, la quale NON la vede.
<?php
$nick = "juzam";
function ciao()
{
echo("ciao".$nick);
}
?>
Per ovviare a questo problema usiamo "global".
La variabile $nick viene ora vista dalla nostra funzione.
<?php
$nick = "juzam";
function ciao()
{
global $nick;
echo("ciao".$nick);
}
?>
5.0 Passaggio di variabili
Spesso uno script php è composto da più pagine.
Come fare dunque a "passare" una variabile da una pagina all'altra?
5.1 Metodi get e post
L' HTML ci fornisce i FORM come potente strumento per consentire all'utente di inserire dei dati.
Dal sito del w3c possiamo ottenere maggiori informazioni in merito: http://www.w3.org/TR/html4/interact/forms.html.
Bene, supponiamo di voler inviare ad una pagina username e password.
Con molta fantasia la pagina si chiamerà login.php
Ecco come dovrà essere strutturato il form:
A questo punto, all'interno di login.php, potremo riferirci alle variabili
<form action=login.php method=post>
<input type="text" name=username>
<input type="password" name=pwd>
<input type="submit" value=send>
</form>
$username
$pwd
e farne cio' che vogliamo.
Abbiamo quindi passato due variabili da una pagina all'altra.
Come detto i due metodi sono post e get: la differenza sta nel fatto che i form con metodo get passano le variabili come query string, mentre quelli con post non mostrano nulla nella barra degli indirizzi.
Gli array associativi $HTTP_GET_VARS e $HTTP_POST_VARS contengono il valore delle variabili passate tramite form.
Quindi: $HTTP_POST_VARS[pwd] nel nostro caso conterrà la password.
MODALITA' | STRINGA |
sola lettura | r |
lettura / scrittura | r+ |
sola scrittura | w |
scrittura / lettura | w+ |
solo append | a |
append / lettura | a+ |
Sul manuale ufficiale è presente la
lista delle funzioni di filesystem
Per quanto riguarda le directory ecco come si lista il contenuto:
Sul manuale è presente la lista delle funzioni relativa alle directory.<? $handle = opendir('$nomedir'); echo "Contenuto della directory $nomedir<br>"; while ($element = readdir($handle)) echo "<br>$element"; closedir($handle); ?>
7.0 Links
Ecco un elenco di url, relativi a php ma non solo:
Introduzione | | Sintassi | | Flusso di esecuzione e cicli | | Funzioni | | Passaggio di variabili | | File & Directory | | Links |
Spinhacker404 Hacklab Genova |