Php Operazioni Comuni Barbiera 97

29
PHP Esempi d’uso del PHP per operazioni comuni Roberto Barbiera Corso di formazione per “Programmatori Web”

description

Esempi di utilizzo del PHP per le operazioni comuni

Transcript of Php Operazioni Comuni Barbiera 97

Page 1: Php Operazioni Comuni Barbiera 97

PHP

Esempi d’uso del PHP per operazioni comuni

Roberto Barbiera

Corso di formazione per “Programmatori Web”

Page 2: Php Operazioni Comuni Barbiera 97

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 2

Overview

• Generazione di documenti PDF• Upload di file da WEB• Inoltro di email• Integrazione di applicazioni con il CAS

(Central Authentication Service)

Page 3: Php Operazioni Comuni Barbiera 97

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 3

Generazione di documenti PDF

Page 4: Php Operazioni Comuni Barbiera 97

Generazione di documenti PDF

La classe FPDF

• FPDF è una classe PHP che permette di generare documenti PDF direttamente da PHP. La F di FPDF sta per "Free": può essere utilizzata per qualsiasi utilizzo e modificata per soddisfare esigenze particolari

• Ecco una lista delle sue caratteristiche principali:– Scelta dell'unità di misura, del formato pagina e dei margini – Utilizzo dell'intestazione e del piè di pagina – Cambio pagina automatico – Ritorno a capo automatico e giustificazione del testo – Supporto immagini (JPEG e PNG) – Gestione dei Links – Gestione dei colori

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 4

Page 5: Php Operazioni Comuni Barbiera 97

Generazione di documenti PDF

Esempio di utilizzo

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 5

<?php require('fpdf.php'); $pdf=new FPDF(); $pdf->AddPage(); $pdf->SetFont('Arial','B',16); $pdf->Cell(40,10,'Hello World!'); $pdf->Output(); ?>

Dopo aver incluso il file libreria, creiamo un oggetto FPDF. Il costruttore FPDF() viene usato, qui sopra, con i valori di default: le pagine sono formato A4, verticale, e con unità di misura in millimetri.

$pdf=new FPDF('P','mm','A4');

Page 6: Php Operazioni Comuni Barbiera 97

• FPDF([string orientation [, string unit [, mixed format]]])

– orientation: Orientamento della pagina. Possibili valori sono (case insensitive): • P (Portrait ) o L (Landscape )

– unit: Unità di misura. Possibili valori sono: • pt: punti mm: millimetri • cm: centimetri in: pollici

– format: Il formato utilizzato per la pagina. Può essere uno dei seguenti valori (case insensitive): • A3 ,A4 ,A5 ,Letter ,Legal

• un formato personalizzato nella forma di array bidimensionale contenente la larghezza e l'altezza (nell'unità di misura data da unit).

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 6

Generazione di documenti PDF

FDF. Il costruttore

Page 7: Php Operazioni Comuni Barbiera 97

• AddPage([string orientation])

• Aggiunge una nuova pagina al documento. Se è già presente una pagina viene chiamato prima il metodo Footer() per inserire il piè di pagina. Quindi viene aggiunta la pagina, la posizione corrente viene impostata nell'angolo superiore sinistro, tenendo conto del margine superiore e sinistro, quindi viene chiamato Header() per visualizzare l'intestazione.

• Il font impostato prima della chiamata viene ripristinato automaticamente. Non c'è bisogno di chiamare di nuovo SetFont() se si vuole continuare con lo stesso font. Lo stesso dicasi per colori e larghezza di riga. L'origine del sistema di coordinate è nell'angolo superiore sinistro e l'incremento delle ordinate fa muovere verso il basso.

• Il parametro orientation se non specificato assume il valore passato nel costruttore

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 7

Generazione di documenti PDF

FDF->AddPage()

Page 8: Php Operazioni Comuni Barbiera 97

• SetFont(string family [, string style [, float size]])

• Imposta il font utilizzato per stampare stringhe di caratteri. E' obbligatorio chiamare questo metodo almeno una volta prima di stampare del testo oppure il documento risultante potrebbe non essere valido. Il font può essere sia uno standard oppure uno aggiunto tramite il metodo AddFont().

Parametri– family:Famiglia del font. Può essere sia un nome definito da AddFont() o una delle famiglie

standard (case insensitive): Courier (fixed-width) , Helvetica o Arial (sinonimi; sans serif) , Times (serif) , Symbol (symbolic)

– style: Stile del font. Possibili valori sono (case insensitive): stringa vuota: normale, B: grassetto, I: corsivo, U: sottolineato , o qualsiasi combinazione. Il valore di default è normale.

– size: Dimensione del font in punti. Se non è stata specificata nessuna dimensione dall'inizio del documento, viene preso il valore 12.

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 8

Generazione di documenti PDF

FDF->SetFont()

Page 9: Php Operazioni Comuni Barbiera 97

• Cell(float w [, float h [, string txt [, mixed border [, int ln [, string align [, int fill [, mixed link]]]]]]])

• Stampa una cella (area rettangolare) con bordi, colore di sfondo e stringa di caratteri opzionali. L'angolo superiore sinistro della cella corrisponde alla posizione corrente. Il testo può essere allineato o centrato. Dopo la chiamata, la posizione corrente si sposta a destra o sulla linea successiva. E' possibile inserire un link sul testo. Se l'interruzione di pagina automatica è abilitata e la cella va oltre i limiti, viene inserita una interruzione di pagina prima dell'output.

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 9

Generazione di documenti PDF

FDF->Cell()

Page 10: Php Operazioni Comuni Barbiera 97

• string Output([string name [, string dest]])

• Passa il documento a una destinazione: stringa, file locale o browser. Nell'ultimo caso, verrà usato il plug-in (se presente), oppure sarà forzata l'apertura di una finestra di download ("Salva con nome"). Se necessario, il metodo richiama prima Close() per chiudere il documento.

• Parametri– name: Il nome del file. Se non viene specificato, il documento sarà inviato al browser (destinazione I) con il nome

doc.pdf. – dest: Destinazione dove mandare il documento. Può essere specificato uno dei seguenti valori:

• I: manda il 'file inline' al browser. Il plug-in sarà utilizzato se presente. Il nome specificato con name sarà utilizzato quando l'utente selezionerà l'opzione "Salva con nome" sul link generato sul PDF.

• D: manda al browser e forza il download del file con il nome dato con name. • F: salva il file in locale con il nome dato con name. • S: ritorna il documento come stringa. name is ignored.

– Se il parametro dest non viene specificato ma viene specificato un nome, la destinazione sarà F. Se non viene specificato alcun parametro, la destinazione sarà I.

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 10

Generazione di documenti PDF

FDF->Output()

Page 11: Php Operazioni Comuni Barbiera 97

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 11

Upload di file da WEB

Page 12: Php Operazioni Comuni Barbiera 97

• Spesso si ha la necessità di consentire agli utenti del proprio sito WEB l’upload di file (es. presentazione di pratiche on-line)

• L’utente deve poter selezionare il file dal filesystem del proprio PC e deve inviarlo al server

• Il server deve recepire il file e memorizzarlo sul DB

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 12

Upload di file da WEB

Il problema

Page 13: Php Operazioni Comuni Barbiera 97

• PHP semplifica il caricamento di file da WEB. Utilizza uno speciale array $_FILES contenente informazioni sui file inviati tramite metodo POST.

• E’ buona norma verificare l’integrità del caricamento prima di accettarlo. – Il file deve avere una dimensione (chiave ‘size’ in $_FILES)

maggiore di zero– Il file deve essere stato caricato con un’operazione POST

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 13

Upload di file da WEB

Gli strumenti del PHP

Page 14: Php Operazioni Comuni Barbiera 97

• Esistono 6 variabili di configurazione (php.ini) di PHP che influenzano i caricamenti di file in POST:– file_uploads -> abilita l’upload dei file– max_execution_time -> tempo massimo di esecuzione di

ciascuno script– max_input_time -> tempo massimo per effettuare il parsing dei

dati in input– upload_max_filesize -> dimensione massima dei file da caricare– post_max_size -> dimensione massima dei dati in POST– upload_tmp_dir -> directory temporanea di upload

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 14

Upload di file da WEB

Variabili di configurazione

Page 15: Php Operazioni Comuni Barbiera 97

• Creiamo una form web di tipo multipart/form-data

• Impostiamo MAX_FILE_SIZE (in byte) in un campo hidden

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 15

Upload di file da WEB

Passo 1: la form WEB

<form enctype="multipart/form-data" action=“upload.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="8000000"> Seleziona il file: <input type="file" name="data"> <input type="submit" name="submit" value="Invia"></form>

Page 16: Php Operazioni Comuni Barbiera 97

• I file vengono prima salvati in una directory temporanea del server

(es. C:\xampp\tmp)

• Verificare la dimensione del file

• Verificare che si stia lavorando su di un file caricato via web mediante la chiamata della funzione is_uploaded_file()

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 16

Upload di file da WEB

Passo 2: verifica dei dati caricati

// controllo della dimensione del file if ($_FILES['data']['size'] == 0) { die("ERRORE: File caricato di zero byte "); }

// controllo della validità del file if (!is_uploaded_file($_FILES['data']['tmp_name'])) { die("ERROR: File non valido"); }

Page 17: Php Operazioni Comuni Barbiera 97

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 17

Upload di file da WEB

Passo 3: salvataggio del file

// mette il contenuto in una variabile $fileData = addslashes(file_get_contents($_FILES['data']['tmp_name'])); // ottiene il nome e il tipo $fileType = $_FILES['data']['type']; $fileName = $_FILES['data']['name'];

// apre la connessione al DB $connection = mysqli_connect('localhost', 'corso', 'corso', 'corsoPhp') or die ("ERROR: Cannot connect"); // crea ed esegue la insert sulla tabella $sql = "INSERT INTO tb_file (file, nome, tipo) VALUES ('$fileData', '$fileName', '$fileType')"; mysqli_query($connection, $sql) or die ("ERROR: " . mysqli_error($connection) . " (query $sql)"); // chiude la connessione mysqli_close($connection);

Page 18: Php Operazioni Comuni Barbiera 97

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 18

Inoltro di email

Page 19: Php Operazioni Comuni Barbiera 97

• Si desidera predisporre un servizio WEB che consenta agli utenti di inviare email ad un determinato indirizzo

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 19

Inoltro di email

Il problema

Page 20: Php Operazioni Comuni Barbiera 97

• E’ possibile utilizzare:– La funzione built-in mail()– Le classi Mail_mime e Mail di PEAR

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 20

Inoltro di email

Gli strumenti del PHP

Page 21: Php Operazioni Comuni Barbiera 97

• bool mail ( string $to , string $subject , string $message[, string $header [, string $parameters ]] )

• Accetta 5 argomenti: il destinatario, l’oggetto del messaggio, il corpo del messaggio, intestazione opzionali (separate da ‘\r\n’) e parametri opzionali.

• Tra le intestazioni opzionali l’intestazione “From:” è obbligatoria• Il valore restituito indica solamente se il messaggio è stato consegnato all’agente di

posta locale o al server SMTP; non offre alcuna indicazione sul fatto che il messaggio abbia raggiunto il destinatario

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 21

Inoltro di email

La funzione mail()

L'implementazione Windows della funzione mail() differisce sotto molti aspetti dall'implementazione Unix. In Windows non usa un programma in locale per comporre i messaggi, ma opera direttamente sui socket (vedi parametri SMTP e smtp_port in php.ini. In UNIX utilizza il comando sendmail

L'implementazione Windows della funzione mail() differisce sotto molti aspetti dall'implementazione Unix. In Windows non usa un programma in locale per comporre i messaggi, ma opera direttamente sui socket (vedi parametri SMTP e smtp_port in php.ini. In UNIX utilizza il comando sendmail

Page 22: Php Operazioni Comuni Barbiera 97

• Consente in maniera semplice di generare messaggi di posta multiparti.

• Si crea un oggetto Mail_mime() con due parti: un componente di testo semplice e un componente HTML in linea, allegati rispettivamente con i metodi setTXTBody() e setHTMLBody(). Secondo la specifica MIME, le due parti vengono concatenate in un singolo messaggio.

• Si trasmette quindi il messaggio utilizzando la classe Mail di PEAR.

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 22

Inoltro di email

Le classi Mail_mime e Mail

Page 23: Php Operazioni Comuni Barbiera 97

• Per allegare un file è possibile utilizzare il metodo addAttachment(); è possibile richiamare il metodo per ogni file che si intende aggiungere

• Se si desidera inserire nel corpo del messaggio immagini in linea, è sufficiente:– fare riferimento alle immagini nel corpo HTML– Aggiungere al messaggio con il metodo addHTMLImage()

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 23

Inoltro di email

Le classi Mail_mime e Mail

Page 24: Php Operazioni Comuni Barbiera 97

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 24

Integrazione di applicazioni con il CAS

Central Authentication Service

Page 25: Php Operazioni Comuni Barbiera 97

• CAS è un sistema di autenticazione centralizzato ideato originalmente dalla Yale University allo scopo di offrire un modo affidabile per l’autenticazione di utenti in applicazioni.

• CAS è diventato un JA-SIG project nel Dicembre del 2004.

• https://sso.unipa.it/cas (CAS Personale UNIPA)• https://sso.unipa.it/studenticas (CAS Studenti)• Riferimento interno: Davide Ficano ([email protected])

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 25

Integrazione di applicazioni con il CAS

Il CAS

Page 26: Php Operazioni Comuni Barbiera 97

• Per integrare il CAS in applicazioni PHP si può fare riferimento a:– http://www.ja-sig.org/wiki/display/CASC/phpCAS

• E’ necessario abilitare l’estensione PHP extension=php_curl.dllnei seguenti files di XAMPP

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 26

Integrazione di applicazioni con il CAS

Predisporre l’ambiente

Page 27: Php Operazioni Comuni Barbiera 97

• Scaricare phpCAS client da:– http://www.ja-sig.org/downloads/cas-clients/php/

• Scompattare l’archivio ed includerlo nell’ include_path del PHP

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 27

Integrazione di applicazioni con il CAS

Integrare il CAS

NOTA: In PHP 5.x sostituire nel file CAS.php la linea di codice:if (version_compare(PHP_VERSION,'5','>=')) {

con la seguenteif (version_compare(PHP_VERSION,'5','>=') && !function_exists("domxml_new_doc")) {

NOTA: In PHP 5.x sostituire nel file CAS.php la linea di codice:if (version_compare(PHP_VERSION,'5','>=')) {

con la seguenteif (version_compare(PHP_VERSION,'5','>=') && !function_exists("domxml_new_doc")) {

Page 28: Php Operazioni Comuni Barbiera 97

• In ogni pagina privata dell’applicazione includere le seguenti linee di codice:

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 28

include_once('CAS/CAS.php');

phpCAS::client(CAS_VERSION_2_0,'sso.unipa.it',443,'cas',false);phpCAS::setNoCasServerValidation();phpCAS::forceAuthentication();$username = strtoupper(phpCAS::getUser());

if (isset($username) && trim($username) != "") { //imposta una variabile di sessione indicante il fatto che l'utente è loggato //nell'applicazione locale $_SESSION['loggedInLocally'] = true; // imposta una variabile di sessione contentente lo username $_SESSION['username'] = phpCAS::getUser(); }

Integrazione di applicazioni con il CAS

Integrare il CAS

Page 29: Php Operazioni Comuni Barbiera 97

• Per effettuare il logout da tutte le applicazioni integrate col CAS invocare il metodo logout()

• Per effettuare il logout solamente dalla propria applicazione è sufficiente ripulire le variabili di sessione.

10/04/23UNIVERSITA' DEGLI STUDI DI PALERMO - CORSO "PROGRAMMATORI WEB" 29

Integrazione di applicazioni con il CAS

Integrare il CAS

include_once('CAS/CAS.php');phpCAS::setDebug();phpCAS::client(CAS_VERSION_2_0,'sso.unipa.it',443,'cas',false);phpCAS::logout();