Il team di PHP ha annunciato il prossimo 31 dicembre come il termine ultimo di supporto per la versione 4 di PHP. Dal primo gennaio 2008 PHP4 non verrà più supportato ufficialmente dal team di sviluppo.
Verranno ancora sviluppate eventuali patch di sicurezza per PHP4 solo fino ad agosto 2008. Fino ad oggi la maggior parte dei Internet Service Provider fornisce installazioni con PHP4, ma il recente annuncio del team di PHP forzerà gli stessi provider all'aggiornamento dei server verso il PHP5.
Sebbene PHP5 offra molte nuove caratteristiche è stato progettato per essere compatibile il più possibile con le versioni precedenti limitando, naturalmente, le funzionalità non conciliabili.
Dalla necessità di migliorare questa situazione nasce il progetto GoPHP5, un impegno da parte di numerosi gruppi di sviluppo di progetti open source per cui, a partire dal 5 febbraio 2008, il rilascio di qualsiasi nuova caratteristica dovrà includere, tra i requisiti minimi necessari ad un corretto funzionamento, una versione di PHP uguale o maggiore alla 5.2.0.
In questo articolo diviso in due sezioni ricorderemo in primo luogo le più importanti novità di PHP 5 per poi procedere ad alcuni consigli su come preparare il passaggio dall'una all'altra versione del potente motore di scripting. Partiamo dunque dalle novità di PHP 5.
Novita di PHP5
In questi ultimi anni le molte esigenze dei programmatori hanno contribuito ad un accrescimento delle potenzialità per quanto riguarda la programmazione ad oggetti in ambiente PHP. Gli autori dello Zend Engine 2.0, il motore sul quale si basa il nuovo PHP5, hanno sviluppato un modello ad oggetti molto simile al Java e al C++.
Le nuove funzionalità ed i vantaggi che la nuova versione di PHP fornisce possono essere brevemente riassunti nei seguenti punti:
- MySQL: grazie alla nuova
mysqli
(MySQL Improved extensions) viene offerta la possibilità di utilizzare una connessione SSL verso il server, di gestire query già preparate con parametri collegati, ottimizzandone quindi l'esecuzione. Infine viene offerta una nuova interfaccia Object Oriented a MySQL; - XML: maggiore interoperabilità tra le varie estensioni con un nuovo supporto a DOM (Document Object Model) che consente di considerare questa specifica come un API indipendente dal linguaggio di programmazione;
- Gli iteratori. Raggruppati nella SPL (Standard PHP Library) permettono di ciclare tramite istruzioni foreach su diversi tipi di dato (elenchi di file, risultati di query, documenti XML, ecc);
- Gestione degli errori tramite eccezioni (exception handling). Questo permette, come già avviene in altri linguaggi come Java o C++, di separare completamente la gestione degli errori dalla logica del programma;
- Gestione di stream, filtri e wrapper come interfaccia di lettura e scrittura su file.
- Supporto a SOAP sia per la creazione di web service che come client per web services già esistenti;
- Tidy: un'estensione che permette di validare al volo il codice HTML o XHTML generato come output.
Object model
In PHP 5 è stato introdotto un nuovo Object Model. La manipolazione degli oggetti in PHP è stata completamente riscritta, consentendo migliori performance e nuove funzionalità. Nelle precedenti versioni di PHP gli oggetti, quando venivano richiamati dalle funzioni, erano unicamente rappresentati dal valore; quindi ogni qualvolta si assegnava l'oggetto si determinava una copia dello stesso anziché la creazione di un riferimento.
Questa modalità di utilizzo delle classi è stata abbandonata. Il PHP5, sta assumendo sempre di più le caratteristiche di un linguaggio ad oggetti e secondo questa nuova impostazione, l'assegnazione di un oggetto ad un'altra variabile crea automaticamente un riferimento e non più una copia dell'oggetto stesso.
Eccezioni
PHP 5 possiede un modello per l'eccezioni sintatticamente del tutto simile agli altri linguaggi di programmazione. Un'eccezione all'interno di PHP è identificata con i comandi try
, catch
, e throw
. Per lanciare un'eccezione è sufficiente utilizzare il comando throw
seguito da un oggetto di tipo Exception
o una sua sottoclasse. Per la gestione delle eccezioni, invece, si usa il costrutto try-catch
. Un blocco try
deve includere almeno un blocco catch
. Possono essere usati anche molteplici blocchi catch
in modo da includere più condizioni.
Anche la modalità operativa di funzionamento è analoga a quella presente negli altri linguaggi ad oggetti. In caso di riscontro di un'eccezione il codice non eseguirà il comando corrispondente e PHP passerà al successivo blocco di codice. Se non viene prevista l'eccezione verrà causato un Fatal Error e il PHP mostrerà un Exception Message.
XML
Fare il parsing di un file XML significa manipolare il documento in questo formato attraverso un linguaggio utilizzato come interfaccia. Generalmente, le azioni di parsing consistono nell'accesso in lettura, nella modifica e nell'interrogazione di un file XML. In PHP, fino alla versione 4, per il parsing di documenti XML venivano sfruttate in particolar modo le librerie DOM e SAX; nella versione 5, invece, sono stati introdotti nuovi strumenti anch'essi strutturati su di un'interfaccia ad oggetti - SimpleXML - che ha l'indubbio vantaggio di rendere più facile il compito dello sviluppatore.
Rispetto a SAX, SimpleXML conserva del tutto la struttura propria del file XML anche per quanto riguarda la rappresentazione interna. Rispetto a DOM, invece, si riscontra una facilità di creazione degli script per il parsing; SimpleXML necessita infatti di una sintassi molto più semplice e di listati di conseguenza molto più "leggeri".
MySQL e PHP5
L'estensione mysql
è ancora supportato con la sola differenza che il suo supporto non è più abilitato di default in PHP5. Per abilitarla gli utenti dovranno includere l'opzione --with-mysql
nella fase di compilazione del motore. Successivamente gli utenti dovranno modificare il file php.ini
e abilitare manualmente il supporto dedicato alla vecchia estensione.
Un'altra novità di rilievo è data dall'implementazione interna di SQLite, la libreria che permette di scrivere e gestire un database all'interno di un unico file, esattamente come fa Microsoft Access: in questo modo i fornitori di hosting potranno differenziare ulteriormente le proprie offerte dando anche ai piccoli siti la possibilità di creare pagine Web dinamiche, senza dover per forza utilizzare costosi (anche in termini di prestazioni) DBMS.
Per maggiori informazioni su tutte le nuove funzionalità di PHP5, consultare gli articoli della sezione PHP di HTML.it.
Nella prossima parte dell'articolo passeremo a trattare il processo di migrazione.
Dopo aver considerato nella prima parte dell'articolo le novità di PHP 5 mostriamo nelle prossime pagine il processo di migrazione.
Il Processo di Migrazione
Il processo di migrazione è l'importazione del codice implementato con il PHP4 all'interno del nuovo motore sui cui è basato il PHP5. Quindi, si tratta di comprendere quali modifiche bisogna apportare ad un listato scritto con PHP4 per essere interpretato correttamente dalle nuove versioni del linguaggio.
Il processo di migrazione da PHP4 a PHP5 può essere articolato in due fasi essenziali:
- Verifica della compatibilità
- Aggiornamento del codice
La Verifica della Compatibilità consiste nel controllare se tutte le operazioni che potevano essere compiute in PHP4 sono ancora valide ed in quali termini mantengono la loro validità nella nuova versione. In pratica, facendo riferimento alle nuove funzionalità introdotte dal PHP5, è necessario comprendere se vi sono nuove specifiche per l'esecuzione di un'operazione normalmente effettuata in PHP4.
Entrando in dettaglio, bisogna prestare attenzione alle seguenti situazioni:
- Il nuovo Object Model
- La nuova nomenclatura (verificando per esempio nuove parole riservate, ecc)
- La retroincompatibilità
- Le nuove impostazioni di configurazione
La fase di Aggiornamento del Codice invece è il punto di arrivo del passaggio da PHP4 a PHP5. Infatti, dopo aver verificato le compatibilità e le incompatibilità tra le versioni, si passa alla modifica del codice cercando di rendere lo stesso il più attinente possibile alle specificità del PHP5. In questa fase, è necessario innanzitutto mutare le impostazioni del proprio server facendo riferimento alle nuove modalità di configurazione del PHP; oppure, nel caso degli Internet Service Provider, verificare che le nuove impostazioni di configurazione non alterino la struttura del codice o dell'applicazione nel suo complesso. Lo stadio successivo è invece la modifica dei listati in base all'analisi effettuata nella verifica della compatibilità. Quindi si tratta di rettificare, se necessario, le operazioni non più eseguibili o parzialmente modificate con il PHP5.
Nel seguito verranno mostrati in dettaglio gli aspetti principali di cui tener conto nella migrazione da PHP4 a PHP5.
Retrocompatibilità
Sebbene la maggior parte di codice PHP4 esistente dovrebbe funzionare senza modifiche, è necessario prestare attenzione alle caratteristiche incompatibili con le versioni precedenti.
Tra le principali funzionalità incompatibili possono essere segnalate le seguenti:
- Nuove Parole Riservate
- Per le funzioni
strrpos()
andstrripos()
il parametroneedle
può essere una stringa di uno o più caratteri - Un uso errato degli offsets per le stringhe causa un
E_ERROR
piuttosto che unE_WARNING
- La funzione
array_merge()
accetta solo array e non più stringhe (l'errore causa unE_WARNING
) - Un oggetto senza proprietà assegnate non è più considerato come vuoto
- Le classi devono essere dichiarate prima di essere usate nel caso in cui si stanno utilizzando le nuove funzionalità del PHP5
Per poter apprendere la lista di tutte le funzionalità incompatibili con le altre versioni di PHP si rimanda alla documentazione ufficiale in inglese.
File di configurazione
In PHP5 per Windows ci sono stati dei cambiamenti per il nome dei file CLI e CGI. Nella versione 5, la versione CGI è stata rinominata in php-cgi.exe (prima php.exe) e la versione CLI risiede nella stessa directory (nelle versioni precedenti il path era cli/php.exe).
Migrare la configurazione di Apache è estremamente facile. Si veda l'esempio riportato di seguito per controllare le modifiche:
# PHP4 LoadModule php4_module /php/sapi/php4apache2.dll (windows) LoadModule php4_module modules/libphp4.so (linux) # PHP5 LoadModule php5_module /php/php5apache2.dll (windows) LoadModule php5_module modules/libphp5.so (linux)
Nuove Direttive
Nella configurazione di PHP5 sono state introdotte nuove direttive per quanto concerne il file php.ini:
- Mail.force_extra_parameters: questa nuova funzionalità consente di impostare un ulteriore valore quando si usa la funzione
mail()
. La funzionemail()
è composta da 4 argomenti (SMTP
,smtp_port
,sendmail_from
,sendmail_path
); è possibile tuttavia impostare un quinto parametro che riguarda l'esecuzione da linea di comando dell'eseguibile sendmail.exe. L'impostazione di questa nuova direttiva consente di usare il valore settato nella funzione come quinto parametro, ogni qualvolta viene eseguita la funzione mail(). - Register_long_arrays: consente/disabilita il PHP all'utilizzo della variabili
$ HTTP_ * _VARS
, deprecate in PHP5; - Session.hash_function: nelle versioni precedenti, nella creazione della sessione, non si aveva il controllo dell'algoritmo che impostava il valore del sessionID. Con session.hash_function, si introduce la possibilità di scegliere il tipo di algoritmo usato. Impostando il valore della funzione a 0, la codifica usata sarà MD5 (128bits). Se si vuole utilizzare la codifica SHA-1 (160bits), il valore di
session.hash_function
sarà impostato ad 1; - Session.hash_bits_per_character: definisce la quantità di bit che devono essere immagazzinati in ogni carattere della stringa del session ID quando si converte tale parametro in un dato leggibile o utilizzabile dal codice. Le opzioni sono tre: 4 (0-9, a-f), 5 (0-9, a-v), 6 (0-9, a-z, A-Z, "-", e ",");
- Zend.ze1_compatibility_mode: abilita la compatibilità con lo Zend Engine 1 (PHP4).
Hosting
La migrazione da PHP4 a PHP5 non sarà immediata e richiederà, soprattutto da parte dei fornitori di hosting, un periodo di tempo per poter completare l'operazione di trasferimento: la nuova versione del linguaggio è infatti parzialmente incompatibile con la precedente e costringerà gli sviluppatori a metter mano al loro vecchio codice. Inoltre c'è da considerare almeno durante la fase di transizione (ovvero fino alla dead line di agosto 2008) la possibilità di far convivere PHP5 e PHP4 sulla stessa macchina per poter rendere più agevole e più attinente possibile la migrazione.
Naturalmente la domanda che ci si può legittimamente porre è: quali saranno le conseguenze se si possiede un dominio che attualmente supporta PHP4?
La risposta è semplice e dipende dalla qualità con cui è stato prodotto il codice. Se si è cercato di rendere il passaggio tra le due versioni agevole o se il codice è ben scritto e non presenta singolarità, l'impatto della migrazione sarà minimo o addirittura nullo. Se invece tutti questi presupposti cessano di esistere le conseguenze potranno essere molto spiacevoli fino al non funzionamento del programma.
Il paradigma è che un buon programma scritto per le ultime versioni di PHP4, senza caratteristiche particolari, dovrebbe funzionare senza alcun problema utilizzando la tecnologia del PHP5.