PHP Preprocessor
1 File delle impostazioni
Le impostazioni del php sono nel file "php.ini".
Come mettere il debug : error_reporting = E_ALL , display_errors = ON
Come togliere i tag brevi: short_open_tag = ON
Per rendere le variabili globali tra uno script e l'altro: register_global = ON
Le impostazioni di Apache sono in "<apacheDir>/conf/httpd.conf".
Affianco alla direttiva "LoadModule php_module" ci va "modules/php5apache2.dll" per windows e "libexec/libphp5.so" per linux. Va aggiunta la direttiva "AddType application/x-httpd-php .php" e anche ".html" o ".css" se vogliamo. Gli utenti linux devono modificare "Group #-1" a "Group nobody".
Direttive per le sessioni:
Session.save_handler: opzioni avanzate.
Session.save_path:percorso in cui si salvano le sessioni.
Session.auto_start:se "off" le sessioni vengono create solo con una chiamata a session_start(); o session_register(); se no la recupera o crea a ogni script.
Session.cookie_lifetime: è il tempo di vita dei cookie di sessione (col SID) dopo la chiusura del browser.
Session.use_cookie: se "on" le sessioni si propagano tramite cookie, se è "off" o "on" ma i cookie vengono rifiutati, le sessioni si propagano con "GET/POST".
2 Conoscienze di base
2.1 Tag
I tag canonici sono <php? ?> , quelli brevi sono <? ?> e quelli html sono <script language="php"> </script>
2.2 Phpinfo();
E' una funzione che fornisce tutte le informazioni sull'installazione del server php.
2.3 Commenti
// e # per riga singola /* */ per multiriga
2.4 Output
Echo 'prova';
' ' scrive esattamente il contenuto
" " viene interpretato il contenuto, ($ "" non vengono scritti)
Il punto lega le stringhe (' '.$var)
Alternstivamente si può usare print(" "); o print" ";
3 Variabili
Le variabili non si dichiarano, e il nome deve cominciare con $ non seguito da una cifra.
Si assegnano con $nome=espressione;
Il tipo lo deduce il comilatore, comunque si puo' forzare con ...
Lo scopo delle variabili e' la funzione che le crea e le funzioni create al suo interno (locali), altrimenti definendole con global var1, var2, ... Le si rende globali, se invece vogliamo che conservi il valore anche dopo che viene richiamata per la seconda volta la funzione che la definisce, allora va definita static $nome=valore.
3.1 Gli Array
Gli array si definiscono e poi si usano $nome[y]=x dove y e' un indice di qualsiasi tipo e x e' il valore. Alternativamente $nome=array(x,y,z) e $nome=array(1=>x,2=>y) sempre con ogni tipo.
3.2 Le costanti
Le costanti si definiscono con define(NOME, valore).
4 Controllo del flusso di esecuzione
4.1 Funzioni
Function nome(arg1,arg2,...){
istruzioni;
Return valore; //opzionale
}
Le variabili possono contenere il nome di una variabile,un array o di una funzione ${$variabileinterna}
4.2 Inclusione di script
Include " ": include il file nel punto
Include_once:lo include se non e' gia' stato richiamato
Require: lo include ma se il file non c'e' da errore al contrario di include
Require_once:include se non gia' incluso e se non c'e' da errore.
I percorsi in cui cerca sono in php.ini nella direttiva include_path=" " per windows si usano ; e \ per linux : e /
4.3 Espressioni booleane
== uguale, >,<,!=,<=,>=,=== identico, and, or, !, xor, && and interrotto se primo false; || or se primo non e' true
4.4 Diramazioni
If (test1) {
dichiarazione1}
Else {
dichiarazione2}
Elseif (test2) dichiarazione3
Switch(varnumerica){
Case 1:
dichiar1;
break;
Case 2:
dichiar2;
break;
Default
dichiar3;
}
Test?test_vero:test_falso;
4.5 Cicli
Break termina, continue continua.
While (test) dichiarazione;
Do dichiarazione
while (test);
For (expriniz; test; exprfineciclo) dichiarazione;
Si possono mettere piu' expr di inizio e fine.
Foreach ($var_array as $valore) dichiarazioni riguardo $valore;
Foreach ($var_array as $chiave=>$valore) dichiarazioni riguardo a $chiave e $valore;
Terminazione forzata
exit
Die(messaggio)
5 Tipi
5.1 Tipi di dati
5.1.1 Scalari
Boolean
Integer
Float
String
5.1.2 Composti
Array
Object
5.1.3 Speciali
Resource
Si usa con :ftp_connect(),ftp_get();ftp_quit();
Null
5.2 Casting
Si puo' forzare il tipo di una variabile durante l'assegnazione: $variabile=(tipo) valore
5.3 Controllo
Gettype(); restituisce una stringa col tipo
Per funzioni variabili e' meglio function_exist() o method_exist()
Var_dump(); fornisce varie informazioni sulla variabile
Is_*(); con al posto di * i vari tipi retituisce true o false, ci si puo' mettere anche numeric o scalar.
5.4 Operatori
+ - * / matematici
% modulo
. conc stringa
= += -= .= assegnaz
& and | or ^ xor ~ not >> << shifth bitwise
@ controllo errore
' ' esegue un comando shell
-- ++ incr decr
5.5 Funzioni Predefinite
5.5.1 Stringhe
Echo()
print()
explode()
implode()
rtrim()
ltrim()
strcmp()
strlen()
strrev()
strtolower()
strtoupper()
5.5.2 Array
Array_change_key_case($arr,CASE_UPPER)
array_count_values($arr)
array_diff($arr1,$arr2)
array_fill($iniz,$quanti,$val)
array_merge($arr1,$arr2,..)
array_pop($arr)
array_push($arr,$val)
count($arr)
array_reverse($arr,mant_chiavi_tf)
array_search(termine, $arr,anche_tipo_uguale_tf)
array_shift($arr) e array_unshift($arr) toglie o meno la testa
array_slice($arr, $offset, $length)
sort($arr) e rsort($arr) riordinano sostituendo le chiavi
ksort($arr) ordina rispetto alle chiavi
Le ultime tre hanno tre flag SORT_REGULAR, SORT_NUMERIC , SORT_STRING
natsort($arr) ordina mantenendo chiave/valore
5.5.3 Tempo
time() restituisce un timestamp, cioè il numero di secondi trascorsi dalle 00:00 del 1/1/1970.
microtime() fa precedere anche i microsecondi
getdate(time()) restituisce un array con le seguenti chiavi:
"seconds" 0 - 59
"minutes" 0 - 59
"hours" 0 - 23
"mday" 1 - 31
"wday" 0 - 6
"mon" 1 - 12
"year" xxxx
"yday" 0 - 365
"weekday" sunday - saturday
"month" January - December
0 timestamp
date(formato, time()) formatta la data con la stringa "formato" che può essere tipo:
'd-m-Y G:i:s' restutuisce una data 1-1-2000 15:00:00
'd/m/y g:i:s' restutuisce una data 1/1/00 3:00:00 pm
mktime(ore, minuti, secondi, mese, giorno, anno, oralegale) restituisce il timestamp corrispondente oralegale : 0 solare, 1 legale, -1 non si sa
checkdate(mese, giorno anno) da true se è una data possibile anche se uno tronca l'anno o non mette gli zeri davanti all'unità p trecede il 1970.
6 Trasferimento dati tra pagine
6.1 Diretto
Se nel file php.ini, la direttiva register_global e' = On, i valori mandati da un form sono subito disponibili in variabili con nome uguale all'attributo "name" del campo preceduto dal solito $. Tuttavia per evitare errori e' meglio non usarlo e impostare la direttiva a "Off".
6.2 Array superglobali o autoglobali
Sono degli array predefiniti che sono dichiarati "global" quindi sono sempre disponibili.
- $_GET, $_POST sono usati per recuperare i dati da i form (ad es: $_GET['nomeCampo'])
- $_COOKIE per usare i coockie
- $_SESSION per usare le sessioni
- $_GLOBAL contiene riferimenti alle variabili globali esistenti
- $_ENV contiene le variabili d'ambiente del server
- $_SERVER dipende dal server web
- $_REQUEST si usa con get, post e cookie.
- $_FILE sono impostati dal trasferimenti di file via http.
6.3 Cookies
Da usare se si vuole conservare qualche informazione nel pc client per le visite successive, ad esempio qualche preferenza dell'utente. Si definiscono con setcookie(nome, valore, scadenza, percorso, dominio, sicuro) e poi sono reperibili nell'array superglobale $_COOKIE le cui chiavi sono i nomi.
6.4 Sessioni
Da usare se si vuole mantenere qualche informazione sul server durante la visita attuale, ad esempio l'autenticazione. Si definisce come un array normale $_SESSION[]
Il SID identifica la sessione e viene propagato tramite cookie o tramite variabili nascoste GET/POST.
Direttive su "php.ini":
Session.save_handler: opzioni avanzate.
Session.save_path:percorso in cui si salvano le sessioni.
Session.auto_start:se "off" le sessioni vengono create solo con una chiamata a session_start(); o session_register(); se no la recupera o crea a ogni script.
Session.cookie_lifetime: è il tempo di vita dei cookie di sessione (col SID) dopo la chiusura del browser.
Session.use_cookie: se "on" le sessioni si propagano tramite cookie, se è "off" o "on" ma i cookie vengono rifiutati, le sessioni si propagano con "GET/POST".
Esistono poi le funzioni:
session_set_cookie_params(durata,percorso,dominio,sicuro)
durata: dopo la chiusura del browser percorso: degli script interessati dal cookie dominio: del sito che può accedere al cookie sicuro: 0 no 1 si
e session_get_cookie_params() che restituisce la situazione attuale
7 DB (Mysql)
7.1 Connessione popolamento di un array e disconnessione
7.2 Inserire, eliminare o aggiungere un elemento
8 Filesystem
9 Esempi
9.1 Per ottenere il percorso
$_SERVER['SCRIPT_FILENAME'] da' il percorso su disco
$_SERVER['PHP_SELF'] da' il percorso relativo alla home dello script
9.2 Per raccogliere il dato correttamente
If(!IsSet($GET['nomecampo'])) $_GET['nomecampo']="" controlli se la variabile esiste se no l'assegni vuota
9.3 Per ottenere i dati con un codice più leggibile
<p>etichettaCampo<?=$_GET['nomecampo']; ?></p>
9.4 Per riconoscere il Sistema Operativo
<?php
function GetSistemaOperativo()
{
$os = array(
'Windows NT 5.1' => 'Windows XP',
'Windows NT 5.0' => 'Windows 2000',
'Windows NT 4.90' => 'Windows ME',
'Win95' => 'Windows 95',
'Win98' => 'Windows 98',
'Windows NT 5.2' => 'Windows NET',
'WinNT4.0' => 'Windows NT',
'Mac' => 'Mac',
'PPC' => 'Mac',
'Linux' => 'Linux',
'FreeBSD' => 'FreeBSD',
'SunOS' => 'SunOS',
'Irix' => 'Irix',
'BeOS' => 'BeOS',
'OS/2' => 'OS/2',
'AIX' => 'AIX',
);
foreach($os as $chiave => $valore)
{
if(strpos($_SERVER['HTTP_USER_AGENT'], $chiave))
{
return $valore;
}
}
return 'Altro';
}
?>
9.5 Per riconoscere il browser
<?php
function GetBrowser()
{
$browser = array(
'MSIE' => 'Internet Explorer',
'Firefox' => 'FireFox',
'Lynx' => 'Lynx',
'Opera' => 'Opera',
'WebTV' => 'WebTV',
'Konqueror' => 'Konqueror',
'bot' => 'Bot',
'Google' => 'Bot',
'slurp' => 'Bot',
'scooter' => 'Bot',
'spider' => 'Bot',
'infoseek' => 'Bot',
'Nav' => 'Netscape',
'Gold' => 'Netscape',
'x11' => 'Netscape',
'Netscape' => 'Netscape'
);
foreach($browser as $chiave => $valore)
{
if(strpos($_SERVER['HTTP_USER_AGENT'], $chiave ))
{
return $valore;
}
}
return 'Altro';
}
?>
per essere più sicuri si può usare stringtolower() per mettere tutto minuscolo oppure stripos() non controlla M/m
9.6 Login
File con form: ( login.php)
<?php
echo 'Eventuale autenticazione';
if ( $_GET['msg'] != '' )
echo $_GET['msg'];
?>
<form name = 'provalogin' action ='provalogin.php' method ='post' enctype= 'multipart/form-data'>
nome: <input type = 'text' name ='nome'>
pass: <input type = 'text' name ='pass'>
<input type = 'submit' value ='submit' name ='submit'>
</form>
File con il controllo: (provalogin.php)
<?php
if (isset($_POST['nome']) && isset($_POST['pass']) && !empty($_POST['nome']) && !empty($_POST['pass'])){
if ( ($_POST['nome'] == 'nomeprova' ) && ($_POST['pass'] == 'passwordprova' ) ){
echo 'Sei autenticato';
}else echo 'Non sei autenticato';
}else{
$msg='campi non validi';
header("Location: login.php?msg=$msg");
}
?>