Click here to load reader

PHP_ La Retta Via

  • View
    230

  • Download
    2

Embed Size (px)

DESCRIPTION

Php regole

Text of PHP_ La Retta Via

  • Ultimo Aggiornamento: 2015-11-30 18:23:37 +0000

    Benvenuto

    Traduzioni

    Come contribuire

    Spargi la voce!

    Per iniziare

    Usa l'attuale versione stabile (5.6)

    Il Web server integrato

    Configurazione Mac

    Configurazione Windows

    Stile di codifica

    Caratteristiche del linguaggio

    Paradigmi di programmazione

    Namespace

    Standard PHP Library

    Interfaccia da linea di comando

    Xdebug

    Gestione delle dipendenze

    Composer e Packagist

    PHPLa Retta Via.

    Tweet

  • PEAR

    Pratiche di codifica

    Le basi

    Data e ora

    Design pattern

    PHP e UTF-8

    Iniezione delle dipendenze

    Concetto di base

    Problema complesso

    Contenitore

    Altre letture

    Database

    Estensione MySQL

    Estensione PDO

    Interagire coi database

    Livelli di astrazione

    Templating

    Benefits

    Plain Php Templates

    Compiled Templates

    Further Reading

    Errori ed eccezioni

    Errori

    Eccezioni

    Sicurezza

  • Sicurezza nelle applicazioni Web

    Hashing delle password

    Filtraggio dei dati

    File di configurazione

    Register globals

    Segnalazione degli errori

    Testing

    Test Driven Development

    Behavior Driven Development

    Strumenti complementari

    Server e pubblicazione

    Platform as a Service (PaaS)

    Server virtuali o dedicati

    Server condivisi

    Costruire e pubblicare la tua applicazione

    Virtualizzazione

    Vagrant

    Docker

    Caching

    Opcode Cache

    Caching degli oggetti

    Documentare il tuo codice

    PHPDoc

    Risorse

    Ufficiali

    Persone da seguire

  • BenvenutoSul Web ci sono molte informazioni datate che portano gli utenti PHP fuori strada, propagando cattive abitudini e codice non sicuro. PHP: La Retta Via una guida di riferimento veloce e facile da leggere contenente le migliori tecniche di sviluppo PHP, gli standard popolari di scrittura del codice, link a tutorial autorevoli sparsi per il Web e quelle che secondo gli autori sono attualmente le migliori pratiche.

    Non c un solo modo corretto di usare PHP. Questo sito Web mira a presentare ai nuovi sviluppatori PHP alcuni argomenti che potrebbero non prendere mai in considerazione, se non troppo tardi, e mira a fornire ai professionisti alcune idee fresche riguardo procedure che hanno usato per anni senza mai aggiornarle. Questo sito Web inoltre non ti dir mai quali strumenti usare, ma invece offrir suggerimenti per opzioni multiple, spiegando le differenze nellapproccio e nei casi di utilizzo.

    Questo un documento in sviluppo e continuer a essere aggiornato con nuove informazioni utili ed esempi non appena saranno disponibili.

    Traduzioni

    PHP: La Retta Via tradotto in molte lingue diverse:

    IngleseBulgaroCinese (Semplificato)Cinese (Tradizionale)

    Mentoring

    Provider PaaS PHP

    Framework

    Componenti

    Altre risorse utili

    Video tutorial

    Libri

    Community

    User Groups

    Conferences

    Riconoscimenti

  • FranceseTedescoIndonesianoItalianoGiapponeseCoreanoPersianoPolaccoPortogheseRomenoRussoSerboSlovenoSpagnoloThailandeseTurcoUcraino

    Come contribuire

    Aiuta questo sito Web a diventare la migliore risorsa per i nuovi programmatori PHP! Contribuisci su GitHub

    Spargi la voce!

    PHP: La Retta Via ha immagini banner che puoi usare sul tuo sito Web. Mostra il tuo supporto e fai sapere ai nuovi sviluppatori PHP dove possono trovare buone informazioni.

    Vedi banner

    Torna su

    Per iniziare

    Usa lultima versione stabile (5.6)Se hai appena iniziato con PHP assicurati di usare lultima versione stabile di PHP 5.6. Il team di PHP ha aggiunto nuove potenti funzionalit negli ultimi anni. Nonostante la differenza numerica tra 5.2 e 5.6 sia piccola, ci sono stati dei cambiamenti sostanziali. Se stai cercando una funzione o la sua modalit di utilizzo, la documentazione sul sito php.net avr la risposta.

    Il Web server integrato

    Con PHP 5.4 o successivo, puoi iniziare a studiare PHP senza installare e configurare un web server completo. Per avviare il server, esegui il seguente comando dal terminale nella web root del tuo progetto:

    > php -S localhost:8000

  • Impara a usare da linea di comando il Web server integrato

    Configurazione Mac

    OS X viene fornito con una versione pre-pacchettizzata di PHP, ma normalmente un po pi vecchia dellultima versione stabile. Mountain Lion ha la 5.3.10, Mavericks ha la 5.4.17 e Yosemite ha la 5.5.9, ma con PHP 5.6 gi rilasciato di solito non abbastanza.

    Ci sono diversi modi per installare PHP su OS X.

    Installare PHP tramite Homebrew

    Homebrew un potente gestore di pacchetti per OS X che pu aiutarti a installare facilmente PHP e varie estensioni. Homebrew PHP un repository che contiene formule per Homebrew relative a PHP e ti permetter di installare PHP.

    A questo punto, puoi installare php53 , php54 , php55 o php56 usando il comando brew install e cambiando la versione attiva modificando la variabile PATH .

    Installare PHP tramite Macports

    Il progetto MacPorts uniniziativa della comunit open source per il design di un sistema di semplice utilizzo per la compilazione, linstallazione e laggiornamento di software open source per linea di comando, X11 o Acqua sul sistema operativo OS X.

    MacPorts supporta i binari precompilati, quindi non devi ricompilare le dipendenze dai sorgenti ogni volta. un salvavita se non hai alcun pacchetto installato sul sistema.

    In questo momento puoi installare php53 , php54 , php55 o php56 usando il comando port install . Per esempio:

    sudo port install php54sudo port install php55

    E puoi eseguire il comando select per cambiare la versione attiva di PHP:

    sudo port select --set php php55

    Installare PHP tramite phpbrew

    phpbrew uno strumento per linstallazione e la gestione di versioni multiple di PHP. Pu essere molto utile se due applicazioni/progetti differenti richiedono versioni differenti di PHP e non stai usando le macchine virtuali.

    Compilare il sorgente

    Unaltra opzione che ti fornisce controllo sulla versione di PHP che installi compilarlo tu stesso. In questo caso assicurati di avere installato Xcode o il sostituto di Apple Strumenti da riga di comando per XCode, scaricabile dal

  • Centro Sviluppatori Mac di Apple.

    Installatori all-in-one

    Le soluzioni elencate sopra gestiscono principalmente solo PHP, e non forniscono cose come Apache, Nginx o un server SQL. Le soluzioni all-in-one come MAMP e XAMPP installeranno questi altri software per te e li integreranno luno con laltro, ma la facilit dinstallazione compromette la flessibilit.

    Configurazione Windows

    Puoi installare PHP su Windows in diversi modi. Puoi scaricare i binari e, fino a poco tempo fa, potevi usare un installer .msi. Linstaller non pi disponibile e si ferma a PHP 5.3.0.

    Per lapprendimento e lo sviluppo locale puoi usare il webserver integrato in PHP 5.4 e superiori, in modo da non doverlo configurare. Se preferisci un pacchetto all-in-one che include un webserver e MySQL, allora strumenti come Web Platform Installer, [Zend Server CE][zsce], XAMPP e WAMP ti aiuteranno a configurare un ambiente di sviluppo Windows in men che non si dica. Detto questo, questi strumenti saranno diversi dallambiente di produzione, quindi fai attenzione alle differenze se stai sviluppando su Windows ma pubblicando su Linux.

    Se devi far girare un ambiente di produzione su Windows, allora IIS7 ti fornir quello pi stabile e performante. Puoi usare phpmanager (un plugin GUI per IIS7) per rendere pi semplice la configurazione e la gestione di PHP. IIS7 integra gi FastCGI, devi solo configurare PHP come handler. Per supporto e ulteriori informazioni, c unarea dedicata a PHP su iis.net.

    Torna su

    Stile di codificaLa comunit PHP grande e diversificata, fatta di innumerevoli librerie, framework e componenti. comune per gli sviluppatori PHP scegliere diversi di questi e combinarli in un singolo progetto. importante che il codice PHP aderisca (il pi fedelmente possibile) a uno stile di codifica comune per rendere facile agli sviluppatori mischiare e usare diverse librerie nei loro progetti.

    Il Framework Interop Group ha proposto e approvato una serie di raccomandazioni di stile. Non tutte riguardano lo stile del codice, ma quelle che lo riguardano sono note come PSR-0, PSR-1, PSR-2 e PSR-4. Queste raccomandazioni non sono che una lista di regole che alcuni progetti come Drupal, Zend, Symfony, CakePHP, phpBB, AWS SDK, FuelPHP, Lithium etc. stanno iniziando ad adottare. Puoi usarle in uno dei tuoi progetti, o continuare a usare il tuo stile personale.

    Idealmente dovresti scrivere codice PHP che aderisce ad uno standard noto. Pu essere una qualunque combinazione dei PSR o uno degli standard di codifica di PHP o Zend. Questo significa che altri sviluppatori potranno facilmente leggere e lavorare col tuo codice, e le applicazioni che implementano i componenti potranno essere consistenti anche quando lavorano con molto codice di terze parti.

    Leggi il PSR-0Leggi il PSR-1Leggi il PSR-2Leggi il PSR-4Leggi i PEAR Coding Standards

  • Leggi i Symfony Coding Standards

    Puoi usare PHP_CodeSniffer per controllare che il codice rispetti queste raccomandazioni, e plugin per editor di testo come Sublime Text 2 per avere feedback in tempo reale.

    Puoi sistemare la disposizione del codice automaticamente usando uno dei due strumenti disponibili. Uno il PHP Coding Standards Fixer di Fabien Potencier, testato scrupolosamente. pi grande e pi lento, ma molto stabile e usato da alcuni grandi progetti come Magento e Symfony. Unaltra opzione php.tools, reso popolare dal plugin per editor [sublime-phpfmt][sublime-phpmft]. Nonostante sia nuovo, porta molti miglioramenti sotto il punto di vista della performance, quindi ladattamento in tempo reale nelleditor pi fluido.

    La lingua inglese preferita per tutti i nomi di simboli e infrastrutture del codice. I commenti possono essere scritti in qualunque lingua facilmente comprensibile da tutte le parti presenti e future che dovranno lavorare sul codice.

    Torna su

    Caratteristiche del linguaggio

    Paradigmi di programmazione

    PHP un linguaggio flessibile e dinamico che supporta diverse tecniche di programmazione. Si evoluto moltissimo negli ultimi anni, in particolare aggiungendo un solido modello a oggetti in PHP 5.0 (2004), le funzioni anonime e i namespace in PHP 5.3 (2009) e i trait in PHP 5.4 (2012).

    Programmazione orientata agli oggetti

    PHP ha un set molto completo di funzionalit riguardanti la programmazione orientata agli oggetti inclusi il supporto per le classi, le classi astratte, le interfacce, lereditariet, i costruttori, la clonazione, le eccezioni e altro.

    Leggi riguardo la programmazione orientata agli oggetti in PHPLeggi riguardo i trait

    Programmazione funzionale

    PHP supporta le funzioni di prima classe, il che significa che una funzione pu essere assegnata a una variabile. Ci si pu riferire tramite variabili sia alle funzioni definite dallutente che a quelle native, ed entrambe possono essere invocate dinamicamente. Le funzioni possono essere passate ad altre funzioni come argomenti (caratteristica chiamata Funzioni di ordine superiore) e le funzioni possono restituire altre funzioni.

    La ricorsione, una caratteristica che permette a una funzione di chiamare se stessa, supportata dal linguaggio, ma la maggior parte del codice PHP incentrato sulliterazione.

    Le nuove funzioni anonime (con supporto per le chiusure) esistono da PHP 5.3 (2009).

    PHP 5.4 ha aggiunto la possibilit di legare le chiusure allo scope di un oggetto e ha migliorato il supporto per i callback in modo che possano essere usati quasi sempre in modo intercambiabile con le funzioni anonime.

    Continua a leggere sulla Programmazione funzionale in PHPLeggi sulle funzioni anonime

  • Leggi sulla classe ClosureLeggi lRFC sulle chiusureLeggi sui callbackLeggi sulla chiamata dinamica alle funzioni con call_user_func_array

    Metaprogrammazione

    PHP supporta varie forme di metaprogrammazione tramite meccanismi come la Reflection API e i metodi magici. Ci sono diversi metodi magici disponibili come __get() , __set() , __clone() , __toString() , __invoke() etc. che permettono agli sviluppatori di modificare il funzionamento di una classe. Gli sviluppatori Ruby dicono spesso che a PHP manca il metodo method_missing , ma disponibile sotto il nome di __call() e __callStatic() .

    Leggi sui metodi magiciLeggi sulla Reflection APILeggi sulloverloading

    Namespace

    Come menzionato sopra, la comunit PHP ha molti sviluppatori che creano molto codice. Questo significa che il codice PHP di una libreria potrebbe usare lo stesso nome di unaltra per una classe. Quando entrambe le librerie vengono usate nello stesso namespace, potrebbero collidere e causare problemi.

    I namespace risolvono questo problema. Come descritto nel manuale di PHP, si pu pensare ai namespace come directory del sistema operativo che dividono i file; due file con lo stesso nome possono esistere in directory separate. Allo stesso modo, due classi PHP con lo stesso nome possono esistere in namespace PHP separati. cos semplice.

    importante inserire il codice in un namespace in modo che possa essere usato da altri sviluppatori senza paura che esso collida con altre librerie.

    Nel dicembre 2013 il PHP-FIG ha creato un nuovo standard per lautoloading: PSR-4, che un giorno probabilmente rimpiazzer PSR-0. Attualmente entrambi sono ancora utilizzabili, perch PSR-4 richiede PHP 5.3 e molti progetti che supportano solo PHP 5.2 attualmente implementano PSR-0. Se userai un autoloader standard per una nuova applicazione o pacchetto allora vorrai quasi sicuramente dare unocchiata a PSR-4.

    Un modo raccomandato di usare i namespace delineato nel [PSR-4], che mira a fornire una convenzione standard per la i nomi di file, classi e namespace, in modo da consentire la scrittura di codice plug-and-play.

    Nellottobre 2014 il PHP-FIG ha deprecato il precedente standard di autoloading, PSR-0, che stato sostituito con PSR-4. Attualmente entrambi sono ancora utilizzabili, giacch PSR-4 richiede PHP 5.3 e molti progetti solo per PHP 5.2 implementano attualmente PSR-0. Se hai intenzione di usare uno standard di autoloading per una nuova applicazione o pacchetto, probabilmente PSR-4 la scelta giusta.

    Leggi sui namespaceLeggi il PSR-0Leggi il PSR-4

    Standard PHP Library

  • La Standard PHP Library (SPL) distribuita con PHP e fornisce un insieme di classi e interfacce. fatta principalmente di strutture di dati di uso comune (pile, code, cumuli etc.) e iteratori che possono navigare attraverso queste strutture o attraverso le tue classi che implementano le interfacce SPL.

    Leggi sulla SPLVideo corso sulle SPL su Lynda.com (A pagamento)

    Interfaccia da linea di comando

    PHP stato creato per scrivere applicazioni Web, ma anche utile nella creazione di programmi da linea di comando (CLI). I programmi da linea di comando aiutano ad automatizzare compiti come il testing, la pubblicazione e lamministrazione dellapplicazione.

    I programmi PHP CLI sono potenti perch puoi usare il codice della tua applicazione direttamente, senza dover creare una GUI sicura. Accertati solo di non mettere gli script CLI nella root pubblica!

    Prova ad eseguire PHP dalla tua linea di comando:

    > php -i

    Lopzione -i visualizzer la tua configurazione PHP proprio come la funzione phpinfo.

    Lopzione -a fornisce una shell interattiva, simile allIRB di Ruby o alla shell interattiva di Python. Ci sono anche altre opzioni utili.

    Scriviamo un semplice programma Hello, $name. Per provarlo, crea un file chiamato hello.php come nellesempio.

  • Hello, world

    Impara a eseguire PHP dalla linea di comandoImpara a configurare Windows per lesecuzione CLI

    Xdebug

    Uno degli strumenti pi utili nello sviluppo software un buon debugger. Ti permette di tracciare lesecuzione del codice e monitorare i contenuti dello stack. Xdebug, il debugger di PHP, pu essere utilizzato da diversi IDE per fornire punti di interruzione e ispezioni dello stack. Pu anche permettere a strumenti come PHPUnit e KCacheGrind di eseguire analisi della copertura del codice e di profilatura.

    Se ti trovi con le mani legate e utilizzando var_dump / print_r non riesci ancora a trovare la soluzione, forse devi usare il debugger.

    Linstallazione di XDebug pu essere complessa, ma una delle sue funzioni pi importanti il debug da remoto. Se sviluppi codice localmente e lo testi in una macchina virtuale o su un altro server, il debug da remoto la funzione che dovresti abilitare immediatamente.

    Solitamente dovrai modificare il tuo virtual host o file .htaccess con questi valori:

    php_value xdebug.remote_host=192.168.?.?php_value xdebug.remote_port=9000

    Lopzione remote_host e remote_port corrispondono al tuo computer locale e alla porta su cui fai ascoltare lIDE. A questo punto si tratta solo di mettere lIDE in modalit di ascolto e caricare lURL:

    http://tuo-sito.example.com/index.php?XDEBUG_SESSION_START=1

    Il tuo IDE intercetter lo stato attuale durante lesecuzione dello script, permettendoti di impostare punti di interruzione e ispezionare i valori in memoria.

    I debugger grafici rendono molto semplice navigare nel codice, ispezionare variabili ed eseguire codice nel runtime attivo. Molti IDE hanno il supporto integrato o tramite plugin per il debugging grafico tramite Xdebug. MacGBDp una GUI per Xdebug gratuita, open-source e stand-alone dedicata al Mac.

    Impara a usare XDebugImpara a usare MacGDBp

    Torna su

    Gestione delle dipendenzeCi sono moltissime librerie PHP, framework e componenti tra cui scegliere. Il tuo progetto, probabilmente, ne user diversi. Queste sono dipendenze del progetto. Fino a poco tempo fa, PHP non aveva un buon modo per gestire le dipendenze del progetto. Anche se le gestivi manualmente, dovevi comunque preoccuparti degli autoloader. Non pi.

  • Attualmente ci sono due grandi sistemi di gestione dei pacchetti per PHP: Composer e PEAR. Composer il gestore di pacchetti principale per PHP, ma per lungo tempo PEAR ha ricoperto quel ruolo. Sapere cos PEAR una buona idea perch potresti trovare diversi riferimenti a esso, anche se non lo userai mai.

    Composer e Packagist

    Composer un ottimo gestore delle dipendenze per PHP. Elenca le dipendenze del tuo progetto in un file composer.json e, con pochi semplici comandi, Composer scaricher automaticamente le dipendenze e imposter lautoloading al posto tuo.

    Ci sono gi molte librerie PHP che sono compatibili con Composer pronte per essere usate nel tuo progetto. Questi pacchetti sono elencati su Packagist, il repository ufficiale per le librerie PHP disponibili tramite Composer.

    Come installare Composer

    Puoi installare Composer localmente (nella tua directory di lavoro; ma questo non pi consigliato) o globalmente (es. /usr/local/bin). Supponiamo tu lo voglia installare localmente. Dalla directory root del tuo progetto:

    curl -s https://getcomposer.org/installer | php

    Questo scaricher composer.phar (un archivio PHP binario). Puoi eseguirlo con php per gestire le dipendenze del tuo progetto. Attenzione: se esegui direttamente del codice proveniente dal Web, controllalo online per assicurarti che sia sicuro.

    Installazione su Windows

    Per gli utenti Windows il modo pi facile di configurare tutto usare linstaller [ComposerSetup][6], che esegue uninstallazione globale e imposta la variabile $PATH in modo che si possa chiamare composer nella linea di comando da qualunque directory.

    Come installare Composer (manualmente)

    Linstallazione manuale di Composer una tecnica avanzata; tuttavia, ci sono diverse ragioni per cui uno sviluppatore potrebbe preferire questo metodo rispetto alla procedura di installazione interattiva. Linstallazione interattiva controlla la tua versione di PHP per assicurarsi che:

    una versione di PHP adatta sia in usoi file .phar possano essere eseguiti correttamentecerte directory abbiano permessi sufficienticerte estensioni problematiche non siano caricatecerte opzioni siano presenti nel php.ini

    Poich uninstallazione manuale non esegue alcuno di questi controlli, dovrai decidere se il lavoro vale la pena. Ecco come installare Composer manualmente:

    curl -s https://getcomposer.org/composer.phar -o $HOME/local/bin/composerchmod +x $HOME/local/bin/composer

  • La directory $HOME/local/bin (o una directory di tua scelta) dovrebbe essere nella variabile di ambiente $PATH . In questo modo il comando composer sar disponibile.

    Quando incontri documentazione che dice di eseguire Composer con php composer.phar install , puoi sostituirlo con:

    composer install

    Questa sezione presumer che tu abbia installato composer globalmente.

    Come definire e installare dipendenze

    Composer tiene traccia delle dipendenze del tuo progetto in un file chiamato composer.json . Puoi gestirlo manualmente se preferisci, o usare lo stesso Composer. Il comando composer require aggiunge una dipendenza del progetto e, se non hai un file composer.json , lo crea. Ecco un esempio che aggiunge Twig come dipendenza del tuo progetto:

    composer require twig/twig:~1.8

    In alternativa puoi usare il comando composer init , che ti guider nella creazione di un file composer.json per il tuo progetto. In ogni caso, una volta che hai creato il file composer.json , puoi dire a Composer di scaricare e installare le dipendenze nella cartella vendors/ . Questo vale anche per i progetti che hai scaricato e che forniscono un file composer.json :

    composer install

    Adesso, aggiungi questa linea al file principale della tua applicazione PHP; questo dir a PHP di usare lautoloader di Composer per le dipendenze del tuo progetto.

  • Notifiche di aggiornamento

    Per ricevere notifiche riguardo release di nuove versioni puoi registrati a VersionEye, un servizio web che pu monitorare i tuoi account GitHub e BitBucket alla ricerca di file composer.json e mandare email con le nuove release dei pacchetti.

    Controllare la presenza di vulnerabilit nelle tue dipendenze

    Il Security Advisories Checker un web service e uno strumento da linea di comando. Entrambi esamineranno il file composer.lock e ti diranno se devi aggiornare le tue dipendenze.

    Gestire le dipendenze globali con Composer

    Composer pu anche gestire le dipendenze globali e i loro binari. Luso semplice, tutto quello che devi fare aggiungere il prefisso global al comando. Se per esempio volessi installare PHPUnit globalmente, eseguiresti il seguente comando:

    composer global require phpunit/phpunit

    Questo creer una cartella ~/.composer contenente le tue dipendenze globali. Per rendere disponibili ovunque i binari dei pacchetti, dovrai solo aggiungere la cartella ~/.composer/vendor/bin alla tua variabile $PATH .

    Impara a usare Composer

    PEAR

    Un altro gestore di pacchetti storico che molti sviluppatori PHP amano PEAR. Si comporta pi o meno come Composer, ma presenta alcune differenze che bene conoscere.

    PEAR richiede che ogni pacchetto abbia una struttura specifica, il che significa che lautore del pacchetto deve prepararlo per lutilizzo con PEAR. Usare un progetto che non stato preparato per lutilizzo con PEAR non possibile.

    PEAR installa i pacchetti globalmente, il che significa che dopo la prima installazione essi diventano disponibili per tutti i progetti su quel server. Questa pu essere una buona cosa se molti progetti utilizzano la stessa versione dello stesso pacchetto, ma pu portare a problemi se si creano conflitti di versione tra due progetti.

    Come installare PEAR

    Puoi installare PEAR scaricando linstaller .phar ed eseguendolo. La documentazione di PEAR ha istruzioni dinstallazione dettagliate per ogni sistema operativo.

    Se stai usando Linux, puoi anche dare unocchiata al gestore di pacchetti della tua distribuzione. Debian e Ubuntu, per esempio, hanno un pacchetto APT php-pear .

    Come installare un pacchetto

    Se un pacchetto elencato nella lista di pacchetti PEAR, puoi installarlo specificando il suo nome ufficiale:

  • pear install foo

    Se il pacchetto hostato su un altro canale, dovrai prima scoprire il canale e specificarlo durante linstallazione. Vedi la documentazione sulluso dei canali per pi informazioni su questo argomento.

    Impara a usare PEAR

    Gestire le dipendenze PEAR con Composer

    Se stai gi usando Composer e vorresti installare del codice PEAR, puoi usare Composer per gestire le tue dipendenze PEAR. Questo esempio installer codice da pear2.php.net :

    { "repositories": [ { "type": "pear", "url": "http://pear2.php.net" } ], "require": { "pear-pear2/PEAR2_Text_Markdown": "*", "pear-pear2/PEAR2_HTTP_Request": "*" }}

    La prima sezione "repositories" verr usata per far sapere a Composer che deve inizializzare (o scoprire nella terminologia PEAR) il repository PEAR. Poi nella sezione require viene aggiunto un prefisso al nome del pacchetto, cos:

    > pear-channel/Package

    Il prefisso pear fisso per evitare conflitti, poich un canale PEAR potrebbe essere identico al nome del distributore di altri pacchetti. In questo modo il nome del canale (o lURL completo) pu essere usato per riferirsi al canale in cui si trova il pacchetto.

    Il codice installato viene messo nella directory vendors/ ed automaticamente disponibile tramite lautoloader di Composer:

    vendor/pear-pear2.php.net/PEAR2_HTTP_Request/pear2/HTTP/Request.php

    Per usare questo pacchetto PEAR scrivi semplicemente:

  • Pratiche di codifica

    Le basi

    PHP un linguaggio vasto che permette a programmatori di ogni livello di produrre codice non solo velocemente, ma efficientemente. Tuttavia, avanzando nellapprendimento del linguaggio, ci scordiamo spesso le basi che abbiamo imparato (o su cui abbiamo sorvolato) in favore di scorciatoie e/o cattive pratiche. Per aiutare a combattere questo male comune, questa sezione mira a ricordare ai programmatori delle pratiche di codifica di base in PHP.

    Continua a leggere Le basi

    Data e ora

    PHP ha una classe chiamata DateTime che aiuta nella lettura, scrittura, confronto e calcolo di date e ore. Non ci sono molte funzioni relative alle date e allora in PHP a parte DateTime, ma essa fornisce una interfaccia orientata agli oggetti ai casi di uso pi comuni. Pu gestire i fusi orari, ma ci esula da questa breve introduzione.

    Per iniziare a lavorare con DateTime, converti le rappresentazioni grezze di date e ora in un oggetto con il metodo createFromFormat() o esegui new \DateTime per ottenere la data e lora attuali. Usa il metodo format() per convertire DateTime in una stringa da visualizzare.

  • UTF-8 al livello PHP

    Le operazioni di base con le stringhe, come il concatenamento di due stringhe e lassegnamento di stringhe a variabili, non richiedono nulla di speciale per il supporto UTF-8. Tuttavia la maggior parte delle funzioni per le stringhe, come strpos() e strlen() , richiedono particolare considerazione. Queste funzioni hanno solitamente una controparte mb_* : per esempio, mb_strpos() e mb_strlen() . Queste stringhe mb_* vengono fornite tramite lEstensione Multibyte String, e sono specificatamente disegnate per operare su stringhe Unicode.

    Devi usare le funzioni mb_* ogni qualvolta operi su una stringa Unicode. Per esempio, se usi substr() su una stringa UTF-8, c una buona possibilit che il risultato includa dei caratteri incomprensibili. La funzione corretta da usare sarebbe la controparte multibyte, mb_substr() .

    La parte difficile ricordarsi di usare le funzioni mb_* ogni volta. Se ti dimentichi anche una sola volta, la tua stringa Unicode rischia di divenire incomprensibile durante le operazioni successive.

    Non tutte le funzioni per le stringhe hanno una controparte mb_* . Se non ce n una per quello che vuoi fare, allora peggio per te.

    Inoltre, dovresti usare la funzione mb_internal_encoding() allinizio di ogni script PHP che scrivi (o in cima al tuo script incluso globalmente), e la funzione mb_http_output() subito dopo se il tuo script invia dati a un browser. Definire esplicitamente la codifica delle tue stringhe in ogni script ti salver molti futuri mal di testa.

    Infine, molte funzioni PHP che operano sulle stringhe hanno un parametro opzionale che ti permette di specificare la codifica dei caratteri. Dovresti sempre esplicitamente indicare UTF-8 quando ne hai la possibilit. Per esempio, htmlentities() ha unopzione per la codifica dei caratteri, e dovresti sempre specificare UTF-8 se hai a che fare con certe stringhe. Tieni a mente che, a partire da PHP 5.4.0, UTF-8 la codifica predefinita per htmlentities() e htmlspecialchars() .

    Infine, se stai costruendo unapplicazione distribuita e non sei certo che lestensione mbstring sar disponibile, considera lidea di usare il pacchetto Composer patchwork/utf8. Questo user mbstring se disponibile, e le funzioni non UTF-8 se non lo .

    UTF-8 al livello database

    Se il tuo script PHP accede a MySQL, possibile che le tue stringhe vengano salvate nel database come stringhe non UTF-8 anche se segui tutte le precauzioni di cui sopra.

    Per assicurarti che le tue stringhe vadano da PHP a MySQL come UTF-8, assicurati che il set e la collation di caratteri del tuo database e delle tue tabelle siano impostati a utf8mb4 , e usa il set di caratteri utf8mb4 nella stringa di connessione PDO. Vedi lesempio di codice sotto. Questo estremamente importante.

    Tieni a mente che devi usare il set di caratteri utf8mb4 per il supporto completo a UTF-8, non il set di caratteri utf8 ! Vedi Ulteriori letture per scoprire perch.

    UTF-8 al livello browser

    Usa la funzione mb_http_output() per assicurarti che il tuo script PHP invii stringhe UTF-8 al tuo browser.

    Il browser avr poi bisogno di sapere dalla risposta HTTP che questa pagina devessere considerata come UTF-8. Lapproccio storico usare il tag charset nel tag della tua pagina. Questo approccio perfettamente valido, ma impostare il charset nellheader Content-Type in realt molto pi veloce.

  • Ulteriori letture

    PHP Manual: String OperationsPHP Manual: String Functions

    strpos()strlen()substr()

    PHP Manual: Multibyte String Functionsmb_strpos()mb_strlen()mb_substr()mb_internal_encoding()mb_http_output()htmlentities()htmlspecialchars()

    PHP UTF-8 CheatsheetHandling UTF-8 with PHPStack Overflow: What factors make PHP Unicode-incompatible?Stack Overflow: Best practices in PHP and MySQL with international stringsHow to support full Unicode in MySQL databasesBringing Unicode to PHP with Portable UTF-8Stack Overflow: DOMDocument loadHTML does not encode UTF-8 correctly

    Torna su

    Iniezione delle dipendenzeDa Wikipedia:

    Liniezione delle dipendenze un design pattern della programmazione software che permette la rimozione di dipendenze cablate a codice e rende possibile cambiarle, durante lesecuzione o la compilazione.

    Questa citazione fa sembrare il concetto molto pi complicato di quanto sia in realt. Liniezione delle dipendenze consiste nel fornire a un componente le sue dipendenze tramite liniezione nel costruttore, chiamate a metodi, o limpostazione di propriet. Tutto qui.

    Concetto di base

  • Possiamo dimostrare il concetto con un esempio semplice ma primitivo.

    Abbiamo una classe Database che richiede un adattatore per comunicare col database. Istanziamo un adattatore nel costruttore e creiamo una dipendenza cablata a codice. Questo rende il testing difficoltoso e la classe Database fortemente legata alladattatore.

  • Inversione del controllo

    Linversione del controllo consiste, come suggerisce il nome, nellinvertire il controllo di un sistema tenendo il controllo organizzativo completamente separato dai nostri oggetti. Con liniezione delle dipendenze, questo significa rendere le dipendenze pi flessibili controllandole e istanziandole in un altro punto del sistema.

    Per anni, i framework PHP hanno usato linversione del controllo. Tuttavia, la domanda diventata: quale parte del controllo stai invertendo, e dove? Per esempio, i framework MVC generalmente fornivano un oggetto padre o un controller di base che gli altri controller dovevano estendere per accedere alle sue dipendenze. Questa inversione del controllo, ma invece di rendere le dipendenze pi flessibili, questo metodo semplicemente le spostava.

    Liniezione delle dipendenze ci permette di risolvere questo problema in maniera pi elegante, iniettando solo le dipendenze che ci servono, quando ci servono, senza il bisogno di alcuna dipendenza rigida.

    Principio di inversione della dipendenza

    Il principio di inversione della dipendenza la D nellinsieme di principi di design orientato agli oggetti S.O.L.I.D., secondo cui si dovrebbe Dipendere dalle astrazioni. Non dipendere dalle concrezioni. Detto semplicemente, questo significa che le nostre dipendenze dovrebbero essere interfacce/contratti o classi astratte, non implementazioni concrete. Possiamo facilmente rifattorizzare lesempio sopra in modo che segua questo principio.

  • Contenitore

    La prima cosa che dovresti capire riguardo i contenitori di iniezione delle dipendenze che non sono uguali alliniezione delle dipendenze. Un contenitore unutilit che ti aiuta a implementare liniezione delle dipendenze. Tuttavia, possono essere (e spesso sono) usati male per implementare un anti-pattern, la localizzazione dei servizi. Iniettare nelle tue classi un contenitore DI come un localizzatore di servizi crea una dipendenza dal contenitore ancora pi forte di quella che stai sostituendo. Inoltre rende il tuo codice molto meno trasparente e pi difficile da testare.

    La maggior parte dei framework moderni ha il proprio contenitore di iniezione delle dipendenze che ti permette di unire insieme le dipendenze tramite configurazione. Questo significa che puoi scrivere del codice applicativo pulito e indipendente quanto il framework su cui basato.

    Altre letture

    Learning about Dependency Injection and PHPWhat is Dependency Injection?Dependency Injection: An analogyDependency Injection: Huh?Dependency Injection as a tool for testing

    Torna su

    DatabaseMolte volte il tuo codice PHP utilizzer un database per memorizzare informazioni. Hai diverse opzioni per connetterti e interagire con il tuo database. Lopzione consigliata fino a PHP 5.1.0 era di usare i driver nativi come mysqli, pgsql, mssql etc.

    I driver nativi vanno bene se usi un database nella tua applicazione ma se, per esempio, stai usando MySQL e un po di MSSQL, o devi connetterti a un database Oracle, allora non potrai usare gli stessi driver. Dovrai imparare una nuova API per ogni database e pu diventare faticoso.

    Estensione MySQL

    Lestensione mysql per PHP non pi attivamente sviluppata ed ufficialmente deprecata a partire da PHP 5.5.0, il che significa che sar rimossa nei prossimi rilasci. Se nelle tue applicazioni stai usando delle funzioni che iniziano con mysql_* come mysql_connect() o mysql_query() , sappi che nelle versioni successive semplicemente non saranno pi disponibili. Questo significa che sarai obbligato a riscrivere il tuo codice a un certo punto, quindi lopzione migliore rimpiazzare mysql con mysqli o PDO secondo la tua tabella di marcia; in questo modo dopo non dovrai farlo in fretta e furia.

    Se stai iniziando ora, non usare assolutamente lestensione mysql: usa lestensione MySQLi o PDO.

    PHP: Scegliere una API per MySQLTutorial PDO per sviluppatori MySQL

  • Estensione PDO

    PDO una libreria di astrazione della connessione al database (integrata in PHP a partire dalla versione 5.1.0) che fornisce uninterfaccia comune per la comunicazione con molti database differenti. Per esempio, puoi usare praticamente lo stesso codice per interfacciarti con MySQL o SQLite:

  • $stmt->execute();

    Questo codice corretto. Usa un bound parameter in uno statement PDO. In questo modo viene effettuato lescape dellinput esterno ID prima che questo venga introdotto nel database, evitando potenziali attacchi di tipo SQL injection.

    Per le operazioni di scrittura, come INSERT e UPDATE, particolarmente importante filtrare prima i dati e poi pulirli (rimozione di tag HTML, JavaScript etc.). PDO li pulir solo rispetto allSQL, non alla tua applicazione.

    Impara a usare PDO

    Dovresti anche tenere in considerazione che le connessioni al database usano risorse, e non sarebbe strano che tali risorse si esaurissero se le connessioni non vengono chiuse implicitamente (ma pi comune in altri linguaggi). Usando PDO, puoi chiudere implicitamente la connessioni distruggendo loggetto, ovvero assicurandoti che tutti i rimanenti riferimenti a esso vengano cancellati (impostati a NULL). Se non lo fai esplicitamente, PHP chiuder automaticamente la connessione quando il tuo script termina lesecuzione, a meno che, ovviamente, tu non stia usando delle connessioni persistenti.

    Impara a usare le connessioni PDO

    Interagire coi database

    Quando gli sviluppatori iniziano a studiare PHP, spesso finiscono per mescolare linterazione col database con la logica di presentazione, usando codice come questo:

    Questo una pessima pratica per diverse ragioni: principalmente difficile da debuggare, difficile da testare, difficile da leggere e stamper molti campi se non imposti un limite.

    Nonostante ci siano molte soluzioni per farlo - a seconda che si preferisca lOOP o la programmazione funzionale - ci devessere un elemento di separazione.

    Considera il passo pi semplice:

  • Questo un buon inizio. Metti quei due pezzi in due file diversi e hai una separazione pulita.

    Crea una classe per metterci quel metodo e hai un modello. Crea un semplice file .php per metterci la logica di presentazione e hai una vista, che molto simile allMVC - unarchitettura OOP comune a molti framework.

    foo.php

  • essere un problema serio se vorrai mai fare lo unit testing della tua applicazione.

    PHPBridge ha unottima risorsa chiamata Creating a Data Class che copre un argomento simile, ed perfetta per sviluppatori che stanno prendendo famigliarit solo ora col concetto di interazione coi database.

    Livelli di astrazione

    Molti framework forniscono il proprio livello di astrazione, che a volte basato su PDO. Spesso questi emulano in un sistema di database funzionalit presenti solo in un altro, fornendoti dei metodi PHP per costruire le tue query; in questo modo forniscono unastrazione reale del database invece della semplice astrazione della connessione fornita da PDO. Ovviamente, questo complica leggermente le cose, ma se stai costruendo unapplicazione portatile che deve funzionare con MySQL, PostgreSQL e SQLite, allora un po di complicazione pu essere introdotta per avere del codice pulito.

    Alcuni livelli di astrazione sono stati costruiti usando gli standard di namespace PSR-0 o PSR-4, in modo che possano essere installati in qualunque applicazione:

    Aura SQLDoctrine2 DBALPropelZF2 Db

    Torna su

    TemplatingI template sono un modo comodo per separare la logica dei controller e quella di dominio dalla logica di presentazione. Tipicamente i template contengono il codice HTML della tua applicazione, ma possono essere usati anche per altri formati, come lXML. I template vengono spesso chiamati anche viste, che costituiscono parte del secondo componente del pattern di architettura del software modelviewcontroller (MVC).

    Benefici

    Il beneficio principale derivante dalluso dei template la separazione che creano tra la logica di presentazione e il resto della tua applicazione. I template hanno la sola responsabilit di visualizzare contenuto formattato. Non sono responsabili per il recupero o la persistenza dei dati o altri compiti pi complessi. Questo porta alla scrittura di codice pi pulito e pi facile da leggere, particolarmente utile in un team dove gli sviluppatori lavorano sul codice server-side (controller e modelli) e i designer lavorano sul client-side (markup).

    I template, inoltre, migliorano lorganizzazione del codice di presentazione. I template sono generalmente posti in una cartella views, ciascuno definito in un singolo file. Questo approccio incoraggia il riutilizzo del codice: grandi blocchi di codice vengono spezzati in pezzi pi piccoli e riutilizzabili, spesso chiamati template o viste parziali (partials). Per esempio, lheader e il footer del tuo sito possono essere definiti ciascuno in un template e venire poi inclusi prima e dopo ciascun template di pagina.

    Infine, a seconda della libreria che usi, i template possono offrire maggiore sicurezza eseguendo lescape automatico del contenuto generato dallutente. Alcune librerie offrono anche una funzionalit di sand-boxing: in questo caso i designer dei template hanno accesso solo a variabili e funzioni autorizzate.

  • Template PHP semplici

    I template scritti in PHP sono semplicemente dei template che usano codice PHP nativo. Sono una scelta naturale dato che PHP stesso un linguaggio per i template. Questo significa semplicemente che puoi includere codice PHP in altro codice, come lHTML. Si tratta di un beneficio per gli sviluppatori PHP perch non c nessuna nuova sintassi da imparare, conoscono le funzioni disponibili, e i loro editor PHP hanno gi levidenziazione della sintassi e lautocompletamento integrati. Inoltre, i template PHP sono generalmente molto veloci perch non richiedono compilazione.

    Ogni framework PHP moderno utilizza qualche tipo di sistema di template, la maggior parte dei quali usano PHP di default. Al di l dei framework, librerie come Plates o Aura.View semplificano il lavoro con i template PHP offrendo funzionalit di templating moderne come lereditariet, i layout e le estensioni.

    Esempio semplice di template PHP

    Usando la libreria Plates.

    Profilo utenteCiao,

    Esempio di template PHP con ereditariet

    Usando la libreria Plates.

  • Profilo utenteCiao,

    Template compilati

    Nonostante PHP si sia evoluto fino a diventare un linguaggio maturo e orientato agli oggetti, non migliorato molto come linguaggio di templating. I template compilati, come Twig o Smarty*, sopperiscono a questa mancanza offrendo una nuova sintassi che stato studiata appositamente per il templating. Dallescaping automatico allereditariet, passando per le strutture di controllo semplificate, i template compilati sono disegnati per essere pi semplici da scrivere, pi puliti da leggere e pi sicuri da usare. I template compilati possono anche essere condivisi tra diversi linguaggi, e Mustache ne un buon esempio. Poich questi template devono essere compilati c un leggero impatto sulla performance, ma minimo quando si usa un sistema di caching appropriato.

    *Nonostante Smarty offra lescaping automatico, questa funzionalit NON abilitata di default.

    Esempio semplice di template compilato

    Usando la libreria Twig.

    {% include 'header.html' with {'title': 'Profilo utente'} %}

    Profilo utenteCiao, {{ name }}

    {% include 'footer.html' %}

    Esempio di template compilato che usa lereditariet

    Usando la libreria Twig.

    // template.html

    {% block title %}{% endblock %}

    {% block content %}{% endblock %}

  • // user_profile.html

    {% extends "template.html" %}

    {% block title %}Profilo utente{% endblock %}{% block content %} Profilo utente Ciao, {{ name }}{% endblock %}

    Ulteriori letture

    Articoli e tutorial

    Templating Engines in PHPAn Introduction to Views & Templating in CodeIgniterGetting Started With PHP TemplatingRoll Your Own Templating System in PHPMaster PagesWorking With Templates in Symfony 2

    Librerie

    Aura.View (nativo)Blade (compilato, specifico per il framework)Dwoo (compilato)Latte (compilato)Mustache (compilato)PHPTAL (compilato)Plates (nativo)Smarty (compilato)Twig (compilato)Zend\View (nativo, specifico per il framework)

    Torna su

    Errori ed Eccezioni

    Errori

    In molti linguaggi di programmazione, ogni volta che qualcosa va storto viene lanciata uneccezione. Questo certamente un modo possibile di fare le cose, ma PHP un linguaggio con poche eccezioni. Nonostante supporti le eccezioni e sempre pi del codice nativo stia usando a usarle quando si lavora con gli oggetti, la maggior parte di PHP cercher di continuare a processare indipendentemente da quello che accade, a meno che non avvenga un errore fatale.

    Per esempio:

  • $ php -aphp > echo $foo;Notice: Undefined variable: foo in php shell code on line 1

    Questo solo un errore notice, e PHP continuer felicemente. Questo pu confondere chi viene da linguaggi con molte eccezioni, perch riferirsi a una variabile mancante in Python, per esempio, lancia uneccezione:

    $ python>>> print fooTraceback (most recent call last): File "", line 1, in NameError: name 'foo' is not defined

    Lunica vera differenza che Python andr nel panico per ogni piccola cosa, in modo che gli sviluppatori possano essere completamente sicuri che qualunque potenziale problema o caso limite sia coperto, mentre PHP continuer a processare a meno che non avvenga qualcosa di estremo; a questo punto lancer un errore e lo riporter.

    Gravit degli errori

    PHP ha diversi livelli di gravit degli errori. I tre tipi pi comuni di messaggi sono gli errori, i notice e i warning. Questi hanno diversi livelli di gravit: E_ERROR , E_NOTICE e E_WARNING . Gli errori sono errori fatali che avvengono durante lesecuzione; sono solitamente causati da problemi nel tuo codice e devono essere sistemati perch impediranno lesecuzione di PHP. I notice sono messaggi di avviso causati da codice che potrebbe o meno causare problemi durante lesecuzione dello script; lesecuzione non viene fermata. I warning sono errori non fatali: lesecuzione dello script non viene fermata.

    Un altro tipo di messaggio di errore riportato durante la compilazione sono i messaggi E_STRICT . Questi messaggi sono usati per suggerire cambiamenti al tuo codice per assicurare la migliore interoperabilit e compatibilit con le versioni successive di PHP.

    Cambiare il metodo di segnalazione degli errori in PHP

    Il segnalazione degli errori pu essere cambiato usando le impostazioni di PHP e/o delle chiamate a funzioni PHP. Usando la funzione nativa di PHP error_reporting() puoi impostare il livello degli errori per la durata dellesecuzione dello script passando una delle costanti di livello errore predefinite. Questo significa che se vuoi vedere solo warning ed errori - ma non notice - allora puoi configurarlo cos:

  • Operatori di controllo degli erroriSitePointXdebugScream

    ErrorException

    PHP perfettamente in grado di essere un linguaggio fortemente orientato alle eccezioni, e richiede solo qualche linea di codice per fare il cambio. Fondamentalmente puoi lanciare i tuoi errori come eccezioni usando la classe ErrorException , che estende la classe Exception .

    Questa una pratica comune implementata da un grande numero di framework moderni come Symfony e Laravel. Di default Laravel visualizzer tutti gli errori e le eccezioni usando il pacchetto Whoops! se linterruttore app.debug acceso, oppure li nasconder se linterruttore spento.

    Lanciando gli errori come eccezioni durante lo sviluppo puoi gestirli meglio del solito, e se vedi uneccezione durante lo sviluppo puoi racchiuderla in unistruzione di cattura con codice specifico per gestire la situazione. Ciascuna eccezione che catturi rende istantaneamente la tua applicazione un po pi robusta.

    Maggiori informazioni su questo e su come usare la classe ErrorException per gestire gli errori si possono trovare su classe ErrorException.

    Operatori di controllo degli erroriCostanti predefinite per la gestione degli errorierror_reporting()Segnalazione degli errori

    Eccezioni

    Le eccezioni sono una parte standard della maggior parti dei linguaggi di programmazione famosi, ma sono spesso ignorate dai programmatori PHP. Linguaggi come Ruby fanno un uso massiccio delle eccezioni, quindi ogni volta che qualcosa va storto come una richiesta HTTP che fallisce, o una query al database che non funziona, o anche se unimmagine non pu essere trovata, Ruby (o le gem usate) lancer uneccezione a schermo in modo che tu sappia subito che c un errore.

    PHP stesso piuttosto negligente in questo senso: una chiamata a file_get_contents() su un file inesistente non far che restituire FALSE e un warning. Molti vecchi framework PHP come CodeIgniter si limiteranno a restituire false, loggare un messaggio nei loro log proprietari e a volte usare un metodo come $this->upload->get_error() per vedere cos andato storto. Il problema qui che devi cercare lerrore e controllare la documentazione per vedere come recuperare lerrore di quella classe, invece di averlo subito ovvio.

    Un altro problema quando le classi lanciano un errore a schermo automaticamente e terminano il processo. Facendo questo, impedisci a un altro sviluppatore di gestire dinamicamente lerrore. Le eccezioni dovrebbero essere lanciate per mettere a conoscenza lo sviluppatore di un errore; star a loro scegliere come gestirlo. Esempio:

  • $email->to('[email protected]', 'Un tizio');

    try{ $email->send();}catch(Fuel\Email\ValidationFailedException $e){ // La validazione fallita}catch(Fuel\Email\SendingFailedException $e){ // Il driver non riuscito a mandare l'email}finally{ // Eseguito anche se l'eccezione non stata lanciata, e prima che la normale esecuzione riprenda}

    Eccezioni SPL

    La classe generica Exception fornisce molte poche informazioni di debug per lo sviluppatore; tuttavia, per rimediare a questo, possibile creare una versione specializzata di Exception estendola:

  • Ci sono cattive persone pronte e desiderose di manipolare la tua applicazione Web. importante che prendi le precauzioni necessarie per irrigidire la sicurezza della tua applicazione Web. Fortunatamente, i ragazzi dellOpen Web Application Security Project hanno compilato una lunga lista di vulnerabilit di sicurezza note e metodi per proteggerti contro di esse. Questa guida devessere necessariamente letta da qualunque sviluppatore che abbia a cura la sicurezza.

    Leggi la guida di sicurezza OWASP

    Hashing delle password

    Prima o poi chiunque crea unapplicazione PHP che richiede il login degli utenti. Username e password vengono salvati nel database e usati successivamente per autenticare gli utenti al login.

    importante effettuare un hashing appropriato delle password prima di salvarle. Lhashing delle password una funzione irreversibile che viene eseguita sulle password degli utenti. Essa produce una stringa a lunghezza fissa che non pu essere decriptata. Ci significa che puoi confrontare lhash con un altro per determinare se provengono tutti dalla stessa stringa dorigine, ma non puoi determinare la stringa di origine. Se lhashing delle password non viene effettuato e il tuo database letto da una persona non autorizzata, tutti gli account utente sono compromessi. Alcuni utenti potrebbero (sfortunatamente) usare la stessa password per altri servizi. Dunque, importante gestire la sicurezza seriamente.

    In PHP 5.5 stata introdotta la funzione password_hash . In questo momento utilizza lalgoritmo BCrypt, che il pi potente attualmente supportato da PHP. Sar aggiornata in futuro per supportare altri algoritmi. La libreria password_compat stata creata per fornire compatibilit per PHP >= 5.3.7.

    Nellesempio sotto calcoliamo lhash di una stringa, quindi confrontiamo lhash con una nuova stringa. Poich le nostre stringhe di origine sono differenti (secret-password e bad-password) questo login fallir.

  • formati (es. indirizzi email).

    Linput esterno pu essere qualunque cosa: dati di form da $_GET e $_POST , alcuni valori nella variabile superglobale $_SERVER , e il corpo della richiesta HTTP recuperato tramite fopen('php://input', 'r') . Ricorda, linput esterno non limitato ai form inviati dallutente. Anche i file caricati e scaricati, i valori di sessione, i dati nei cookie e i dati da servizi Web di terze parti sono input esterno.

    Anche se linput esterno pu essere salvato, combinato e letto successivamente, ancora input esterno. Ogni volta che processi, visualizzi, concateni o includi dati nel tuo codice, chiediti se sono stati filtrati appropriatamente e se ci si pu fidare di essi.

    I dati possono essere filtrati diversamente a seconda del loro scopo. Per esempio, quando input esterno non filtrato passato nelloutput HTML della pagina, pu esguire codice HTML e JavaScript sul tuo sito! Questo conosciuto come Cross-Site Scripting (XSS) e pu essere un attacco molto pericoloso. Un modo per evitare lXSS sanitizzare tutti i dati generati dallutente prima di visualizzarlo nella tua pagina, rimuovendo i tag HTML con la funzione strip_tags o eseguendo lescape di caratteri dal significato speciale nelle loro rispettive entit HTML con le funzioni htmlentities o htmlspecialchars .

    Un altro esempio il passaggio di opzioni alla linea di comando. Questo pu essere molto pericoloso (ed solitamente una cattiva idea), ma puoi usare la funzione nativa escapeshellarg per sanitizzare gli argomenti del comando eseguito.

    Un ultimo esempio laccettazione di input esterno per determinare un file da caricare dal filesystem. Questa vulnerabilit pu essere sfruttata cambiando il nome di file in un path di file. Devi rimuovere /, ../, i byte nulli o altri caratteri dal path in modo che non possa caricare file nascosti, non pubblici o con informazioni sensibili.

    Impara a filtare i datiImpara a usare filter_varImpara a usare filter_inputImpara a gestire i byte nulli

    Sanitizzazione

    La sanitizzazione rimuove (o fa lescape) i caratteri non permessi o pericolosi dallinput esterno.

    Per esempio, dovresti sanitizzare linput esterno prima di includerlo in codice HTML o inserirlo in una query SQL grezza. Quando usi i parametri di PDO, esso sanitizzer linput per te.

    A volte richiesto di consnetire alcuni tag HTML sicuri nellinput quando viene incluso nella pagina HTML. Questo molto difficile da fare e molti lo evitano usando una formattazione pi ristretta come Markdown o BBCode, tuttavia esistono alcune librerie come HTML Purifier per svolgere questo compito.

    Vedi i filtri di sanitizzazione

    Validazione

    La validazione serve per assicurarsi che linput esterno contenga ci che ti aspetti. Per esempio, potresti voler validare un indirizzo email, un numero di telefono o unet quando processi una richiesta di registrazione.

    Vedi i filtri di validazione

  • File di configurazione

    Nella creazione di file di configurazione per la tua applicazione, le migliori pratiche raccomandano lutilizzo di uno dei seguenti metodi:

    consigliato salvare le informazioni di configurazioni dove non possono essere lette direttamente tramite il file system

    Se devi salvare i tuoi file di configurazione nella root pubblica, chiama i file con estensione .php . Questo assicura che, anche se uno script eseguito direttamente, non sar visualizzato come testo semplice.

    Le informazioni nei file di configurazione dovrebbero essere protette appropriatamente, tramite crittografia o permessi del filesystem per gruppo/utente

    Register globals

    NOTA: A partire da PHP 5.4.0 lopzione register_globals stata rimossa e non pu pi essere usata. Questo incluso solo come avvertimento per chiunque stia aggiornando una vecchia applicazione.

    Quando abilitata, lopzione register_globals far s che molti tipi di variabili (incluse quelle da $_POST , $_GET e $_REQUEST ) siano disponibili nello scope globale dellapplicazione. Questo pu facilmente portare a problemi di sicurezza, perch la tua applicazione non pu stabilire con certezza da dove arrivano i dati.

    Per esempio: $_GET['foo'] sarebbe disponibile tramite $foo , che pu sovrascrivere le variabili non dichiarate. Se stai usando PHP < 5.4.0, assicurati che register_globals sia off.

    register_globals nel manuale PHP

    Segnalazione degli errori

    Il logging degli errori pu essere utile per trovare i punti problematici della tua applicazione, ma pu anche esporre informazioni riguardo la sua struttura al mondo esterno. Per proteggere efficacemente la tua applicazione da problemi che potrebbero essere causati dalla visualizzazioni di questi messaggi, devi configurare il tuo server diversamente negli ambienti di sviluppo e produzione.

    Sviluppo

    Per mostrare ogni possibile errore durate lo sviluppo, configura le seguenti opzioni nel tuo php.ini :

    display_errors = Ondisplay_startup_errors = Onerror_reporting = -1log_errors = On

    Il valore -1 visualizzer ogni possibile errore, anche quando nuovi livelli verranno aggiunti in versioni future di PHP. Anche la costante E_ALL si comporta in questo modo a partire da PHP 5.4. - php.net

  • Il livello di errore E_STRICT stato introdotto nella versione 5.3.0 e non parte di E_ALL , tuttavia lo diventato nella 5.4.0. Questo significa che se vuoi segnalare ogni possibile errore nella 5.3 devi usare -1 o E_ALL | E_STRICT .

    Segnalare ogni possibile errore nelle diverse versioni di PHP

    < 5.3 -1 o E_ALL 5.3 -1 o E_ALL | E_STRICT> 5.3 -1 o E_ALL

    Produzione

    Per nascondere gli errori in produzione configura cos il tuo php.ini :

    display_errors = Offdisplay_startup_errors = Offerror_reporting = E_ALLlog_errors = On

    Con queste impostazioni in produzione, gli errori saranno comunque loggati nei log del web server, ma non saranno visualizzati allutente. Per maggiori informazioni su queste impostazioni, vedi il manuale di PHP:

    error_reportingdisplay_errorsdisplay_startup_errorslog_errors

    Torna su

    TestingScrivere test automatizzati per il tuo codice PHP considerata una buona pratica e pu portare a unapplicazione ben costruita. I test automatizzati sono un ottimo strumento per assicurarsi che la tua applicazione non si rompa quando cambi qualcosa o aggiungi una nuova funzionalit e non dovrebbero essere ignorati.

    Ci sono diversi tipi di strumenti (o framework) per il testing in PHP, ciascuno con un approccio differente; tutti quanti cercano di evitare la necessit di testare manualmente e di assemblare grandi team per il Controllo Qualit solo per assicurarsi che i recenti cambiamenti non rompano funzionalit esistenti.

    Test Driven Development

    Da Wikipedia:

    Il Test Driven Development, in sigla TDD (in italiano: Sviluppo guidato dalle verifiche) un processo di sviluppo del software in cui lo sviluppo vero e proprio preceduto (e guidato, driven) dalla stesura di test automatici. Il processo si articola sulla ripetizione di brevi cicli di sviluppo e collaudo (noti come cicli TDD, TDD cycles) suddivisi in tre fasi successive,

  • sintetizzate dal motto Red-Green-Refactor.

    Ci sono molti modi diversi di testare la tua applicazione.

    Unit testing

    Lo unit testing un approccio di programmazione usato per assicurarsi che funzioni, classi e metodi funzionino come ci si aspetta durante lintero ciclo di sviluppo. Controllando i valori di input e output delle funzioni e dei metodi, puoi accertarti che la logica interna funzioni correttamente. Usando liniezione delle dipendenze e creando classi mock e stub puoi verificare che le dipendenze vengano usate correttamente per una copertura dei test ancora migliore.

    Quando crei una classe o funzione dovresti creare uno unit test per ogni comportamento che deve assumere. Come minimo dovresti assicurarti che generi un errore se le invii argomenti non validi e che funzioni se le invii argomenti validi. Questo aiuter ad assicurarsi che, quando cambi qualcosa in questa classe o funzione successivamente nel ciclo di sviluppo, la vecchia caratteristica continuer a funzionare come previsto. Lunica alternativa a questo sarebbe var_dump() in un file test.php, il che non un modo corretto per creare unapplicazione, sia piccola che grande.

    Laltro utilizzo per gli unit test nel contributo a progetti open source. Se riesci a scrivere un test che mostra una caratteristica non funzionante, lo sistemi e mostri che ora il test passa, le patch saranno accettate molto pi facilmente. Se hai intenzione di lanciare un progetto che accetta contributi esterni, questo dovrebbe essere un requisito.

    PHPUnit lo standard de-facto per la scrittura di unit test per applicazioni PHP, ma ci sono diverse alternative:

    atoumEnhance PHPPUnitSimpleTest

    Integration testing

    Da Wikipedia:

    Lintegration testing (a volte chiamato Integration and Testing, abbreviato I&T) la fase del testing software in cui i moduli individuali vengono combinati e testati come un insieme. Si piazza dopo lo unit testing e prima del validation testing. Lintegration testing prende come input moduli su cui gi stato effettuato unit testing, li raggruppa in aggregati pi grandi, applica i test definiti nel piano di integration testing a questi aggregati e invia come output il sistema integrato, pronto per lesecuzione del system testing.

    Molti degli strumenti per lo unit testing possono essere usati anche per lintegration testing, giacch molti dei principi di base sono gli stessi.

    Functional testing

    A volte conosciuto anche come acceptance testing, il functional testing consiste nellutilizzo di strumenti per la creazione di test automatizzati che usino realmente la tua applicazione invece di limitarsi a verificare che unit individuali di codice si comportino correttamente e riescano a parlare luna con laltra. Questi strumenti funzionano generalmente utilizzando dati reali e simulati utenti dellapplicazione esistenti.

  • Strumenti per il functional testing

    SeleniumMinkCodeception un framework completo che include strumenti di acceptance testingStoryplayer un framework completo per il testing che include il supporto per la creazione e la distruzione di ambienti di test su richiesta

    Behavior Driven Development

    Ci sono due differenti tipi di Behavior-Driven Development (BDD): SpecBDD e StoryBDD. Lo SpecBDD si concentra sul comportamento tecnico del codice, mentre lo StoryBDD si concentra sulle interazioni. PHP ha dei framework per entrambi i tipi di BDD.

    Con lo StoryBDD, scrivi delle storie leggibili da esseri umani che descrivono il comportamento della tua applicazione. Queste storia possono poi essere eseguite come veri e propri test per la tua applicazione. Il framework usato nelle applicazioni PHP per lo StoryBDD Behat, che si ispira al progetto Ruby Cucumber e implementa il DSL Gherkin per la descrizione delle funzionalit.

    Con lo SpecBDD, scrivi delle specifiche che descrivono come il tuo codice dovrebbe funzionare. Invece di testare una funzione o un metodo, descrivi come quella funzione o metodo dovrebbero comportarsi. PHP offre il framework PHPSpec per questo scopo. Questo framework si ispira al progetto Ruby RSpec.

    Link sul BDD

    Behat, il framework StoryBDD per PHP, ispirato al progetto Ruby Cucumber;PHPSpec, il framework SpecBDD per PHP, ispirato al progetto Ruby RSpec;Codeception un framework di testing completo che adotta i principi BDD;

    Strumenti complementari

    Oltre ai framework di testing individuali, ci sono anche altri framework generici e librerie di aiuto utili per ogni approccio.

    Link agli strumenti

    Selenium uno strumento di automazione del browser che pu essere integrato con PHPUnitMockery un Mock Object Framework che pu essere integrato con PHPUnit o PHPSpecProphecy un framework PHP per il mocking di oggetti molto discusso, ma molto potente e flessibile. integrato con PHPSpec e pu essere usato con PHPUnit.

    Torna su

    Server e pubblicazioneLe applicazioni PHP possono essere pubblicate ed eseguite sui Web server di produzione in diversi modi.

    Platform as a Service (PaaS)

  • PaaS fornisce il sistema e larchitettura di rete necessari per eseguire applicazioni PHP in Rete. Questo significa che c bisogno di poca o nessuna configurazione per lanciare applicazioni e framework PHP.

    Recentemente PaaS diventato un metodo piuttosto usato per la pubblicazione, lhosting e la scalatura di applicazioni PHP di ogni dimensione. Puoi trovare una lista di provider PHP PaaS Platform as a Service nella nostra sezione risorse.

    Server virtuali o dedicati

    Se hai dimestichezza con lamministrazione di un sistema o vuoi impararla, i server virtuali o dedicati ti danno totale controllo sullambiente di produzione della tua applicazione.

    nginx e PHP-FPM

    PHP, tramite il FastCGI Process Manager (FPM) integrato, si integra molto bene con nginx, che un server leggero dalle alte prestazioni. Usa meno memoria di Apache e gestisce meglio le richieste simultanee. Questo particolarmente importante su server virtuali che non hanno molta memoria.

    Scopri nginxScopri PHP-FPMScopri come configurare nginx e PHP-FPM in modo sicuro

    Apache e PHP

    PHP e Apache hanno fatto molta storia insieme. Apache totalmente configurabile e ha molti moduli che estendono le sue funzionalit. una scelta comune per i server condivisi e una configurazione facile per i framework PHP e le applicazioni open source come WordPress. Sfortunatamente, Apache usa pi risorse di nginx di default e non riesce a gestire cos tanti visitatori contemporeanei.

    Ci sono molte configurazioni diverse per eseguire Apache con PHP. La pi comune e la pi semplice da configurare il prefork MPM con mod_php5. Nonostante questa non sia la pi efficiente in termini di consumo di memoria, la pi semplice da configurare e usare. Questa probabilmente la scelta migliore se non vuoi addentrarti troppo in profondit nellamministrazione dei server. Nota che per usare mod_php5 DEVI usare il prefork MPM.

    In alternativa, se vuoi ottenere migliori performance e stabilit con Apache puoi usare lo stesso sistema FPM di nginx ed eseguire l[MPM worker] o l[MPM event] con mod_fastcgi o mod_fcgid. Questa configurazione sar molto pi efficiente nellutilizzo di memoria e molto pi veloce, ma pi complicata da installare.

    Scopri ApacheScopri i Multi-Processing ModulesScopri mod_fastcgiScopri on mod_fcgid

    Server condivisi

    PHP deve ringraziare i server condivisi per la sua popolarit. difficile trovare un host che non abbia PHP installato, ma assicurati che sia lultima versione. I server condivisi permettono a te e altri sviluppatori di pubblicare siti sulla stessa machina. Il lato positivo che si tratta di un sistema economico. Il lato negativo che non sai mai che tipo di macello i tuoi vicini creeranno; il rallentamento del server o lapertura di brecce di sicurezza sono pericoli da tenere

  • in considerazione. Se il budget del tuo progetto lo permette, evita i server condivisi.

    Costruire e pubblicare la tua applicazione

    Se ti trovi a dover modificare lo schema del database o eseguire i test prima dellaggiornamento dei file manualmente, ripensaci! Con ogni compito manuale in pi che devi eseguire per pubblicare una nuova versione della tua applicazione aumentano le possibilit di un errore fatale. Che tu stia gestendo un semplice aggiornamento, un processo di build completo o una strategia di integrazione continua, lautomazione dello sviluppo tua amica.

    Tra i compiti che potresti voler automatizzare ci sono:

    Gestione delle dipendenzeCompilazione e minificazione dei mediaEsecuzione dei testCreazione di documentazionePacchettizzazionePubblicazione

    Strumenti di automazione dello sviluppo

    Questi strumenti possono essere descritti come un insieme di script che gestiscono compiti comuni nella pubblicazione del software. Lo strumento non parte del tuo software, ma agisce su di esso da fuori.

    Ci sono molti strumenti open source disponibili per aiutarti con lautomazione dello sviluppo, alcuni scritti in PHP, altri no. Questo non dovrebbe impedirti di usarli, se sono pi adatti per uno specifico compito. Ecco alcuni esempi.

    Phing il modo pi facile per iniziare con la pubblicazione automatica nel mondo di PHP. Con Phing puoi controllare la pacchettizazione, la pubblicazione o il processo di testing tramite un semplice file XML. Phing (che basato su Apache Ant) fornisce un ricco set di compiti solitamente richiesti per installare o aggiornare unapplicazione Web e pu essere esteso con compiti personalizzati, scritti in PHP.

    Capistrano un sistema per programmatori medio-avanzati per eseguire comandi in modo strutturato e ripetibile su una o pi macchine remote. pre- configurato per la pubblicazione di applicazioni Ruby on Rails, ma molti lo usano per pubblicare applicazioni PHP. Il suo corretto utilizzo dipende dalla conoscenza di Ruby e Rake.

    Il post PHP Deployment with Capistrano sul blog di Dave Gardner un buon punto dinizio per programmatori PHP interessati a Capistrano.

    Chef pi di un framework di pubblicazione. un framework di integrazione di sistema molto potente scritto in Ruby che non solo pubblica la tua applicazione ma pu costruire lintero ambiente server o macchina virtuale.

    Deployer uno strumento di pubblicazione scritto in PHP; semplice e [funzionale. Esegue i compiti in parallelo, supporta la pubblicazione atomica, [mantiene la consistenza tra i server. Ha ricette per compiti comuni relativi a [Symfony, Laravel, Zend Framework e Yii.

    Risorse Chef per sviluppatori PHP

    Serie in tre parti sulla pubblicazione di unapplicazione LAMP con Chef, Vagrant ed EC2Articolo sullinstallazione e la configurazione di PHP 5.3 e PEAR con ChefVideo tutorial su Chef fatto da Opscode, i creatori di Chef

  • Altre letture:

    Automatizza il tuo progetto con Apache Ant

    Integrazione continua

    Lintegrazione continua una pratica di sviluppo software in cui i membri di un team integrano il loro lavoro frequentemente. Generalmente ogni persona integra il lavoro almeno giornalmente, portando a pi integrazioni giornaliere. Molti team trovano che questo approccio riduca notevolmente i problemi di integrazione e permette a un team di sviluppare software coeso pi rapidamente.

    Martin Fowler

    Ci sono diversi modi di implementare lintegrazione continua in PHP. Recentemente Travis CI ha fatto un buon lavoro nel rendere lintegrazione continua una realt anche per piccoli progetti. Travis CI un sistema hostato di integrazione continua per la community open source. integrato con GitHub e offre supporto di prima classe per molti linguaggi, incluso PHP.

    Altre letture:

    Integrazione continua con JenkinsIntegrazione continua con PHPCIIntegrazione continua con Teamcity

    Torna su

    VirtualizzazioneEseguire la tua applicazione in un ambiente di produzione diverso da quello di sviluppo pu portare alla comparsa di strani errori quando pubblichi la tua applicazione. anche difficile mantenere i diversi ambienti di sviluppo aggiornati allultima versione delle librerie usate quando lavori con un team di sviluppatori.

    Se stai sviluppando su Windows e pubblicando su Linux (o qualunque cosa che non sia Windows) o stai sviluppando in un team, dovresti considerare la possibilit di usare una macchina virtuale. Pu sembrare complicato, ma oltre agli ambienti di virtualizzazione pi conosciuti come VMware e VirtualBox, ci sono strumenti addizionali che potrebbero aiutarti a configurare un ambiente virtuale in pochi semplici passi.

    Vagrant

    Vagrant ti aiuta a costruire le tue macchine virtuali sfruttando ambienti virtuali noti, e configura questi ambienti basandosi su un singolo file di configurazione. Queste macchine possono essere configurate manualmente, oppure puoi usare un software di provisioning come Puppet o Chef per farlo al posto tuo. Eseguire il provisioning della macchina di base un ottimo modo per assicurarti che pi macchine vengano configurate nella stessa maniera e rimuove la necessit di mantenere complicate liste di comandi dinstallazione. Puoi anche distruggere la macchina e ricrearla senza troppi passi manuali, rendendo cos semplice creare uninstallazione fresca.

    Vagrant crea delle cartelle per condividere il codice tra lhost e la tua macchina virtuale, il che significa che puoi creare e modificare file sul tuo host e poi eseguire il codice nella macchina virtuale.

  • Un po di aiuto

    Se ti serve un picolo aiuto per iniziare a usare Vagrant ci sono dei servizi che potrebbero essere utili:

    tipiche (PHP tra le varie opzioni). Il provisioning effettuato con Chef.

    PHP. Fortemente concentrato su PHP. Oltre alle macchine virtuali locali, pu anche essere usato per configurare servizi cloud. Il provisioning effettuato con Puppet.

    macchine virtuali per lo sviluppo web. Un singolo documento YAML controlla tutto ci che viene installato sulla macchina virtuale.

    Playbook Ansible per progetti basati su PHP.

    Docker

    Oltre a usare Vagrant, un altro semplice modo per configurare un ambiente di sviluppo e uno di produzione Docker. Docker ti aiuta a fornire container Linux per ogni tipo di applicazione. Ci sono molte immagini Docker utili che possono fornirti altri ottimi servizi (es. MySQL, PostgreSQL e molti altri) senza la necessit di installare tali servizi sulla tua macchina locale. Dai unocchiata al Docker Hub Registry per avere una lista dei contenitori pre-fabbricati disponibili, che potrai poi eseguire ed usare con facilit.

    Esempio: Eseguire le tue applicazioni PHP in Docker

    Dopo aver installato docker sulla tua macchina, potrai avviare unistanza di Apache con supporto a PHP in un solo passo. Il comando seguente scaricher uninstallazione di Apache completamente funzionante con lultima versione di PHP, e render disponibile la directory /path/ai/tuoi/file/php allindirizzo http://localhost:8080 :

    docker run -d --name mio-webserver-php -p 8080:80 -v /path/ai/tuoi/file/php:/var/www/html/ php:apache

    Dopo aver eseguito docker run il tuo container sar inizializzato ed eseguito. Se vuoi fermare o avviare nuovamente il tuo container, puoi usare il nome che hai fornito ed eseguire semplicemente docker stop mio-webserver-php e docker start mio-webserver-php senza fornire nuovamente i parametri menzionati sopra.

    Altre risorse su Docker

    I comandi menzionati sopra mostrano solo un modo veloce per eseguire un web server Apache con supporto a PHP, ma ci sono molte altre cose che puoi fare con Docker. Una delle cose pi importanti per gli sviluppatori PHP collegare il proprio web server con listanza di un database, per esempio. La Docker User Guide spiega nel dettaglio come farlo.

    Sito web di DockerInstallazione di DockerImmagini Docker nel Docker Hub RegistryDocker User Guide

    Torna su

  • CachingPHP piuttosto veloce gi di suo, ma possono sorgere dei problemi quando esegui connessioni remote, carichi file etc. Per fortuna, ci sono diversi strumenti a disposizione per velocizzare certe parti dellapplicazione, o ridurre il numero di volte che questi compiti lenti devono essere eseguiti.

    Opcode cache

    Quando un nuovo PHP file viene eseguito, prima compilato in opcode; solo dopo lopcode viene eseguito. Se un file PHP non viene modificato, lopcode rimane lo stesso. Questo significa che il processo di compilazione uno spreco di risorse computazionali.

    qui che le cache dellopcode entrano in gioco. Evitano compilazioni inutili salvando lopcode in memoria e riusandolo nelle chiamate successive. Impostare una cache dellopcode una questione di minuti, e la tua applicazione sar molto pi veloce. Non c alcuna ragione per non usarla.

    A partire da PHP 5.5, c una cache dellopcode integrata chiamata OPcache. anche disponibile per versioni precedenti.

    Altre risorse sulle cache dellopcode:

    OPcache (integrata a partire da PHP 5.5)APC (PHP 5.4 e precedenti)XCacheZend Optimizer+ (parte del pacchetto Zend Server)WinCache (estensione per MS Windows Server)lista di acceleratori PHP su Wikipedia

    Caching degli oggetti

    Alcune volte pu essere utile mettere in cache oggetti singoli nel tuo codice, come, per esempio, dati che sono lenti da ottenere o chiamate al database il cui risultato cambia difficilmente. Puoi usare software di caching degli oggetti per mantenere questi pezzi di dati in memoria per un successivo accesso estremamente veloce. Se salvi questi elementi in un data store dopo averli recuperati, e poi li prendi direttamente dalla cache per le richieste successive, puoi ottenere un notevole miglioramento delle performance e riducendo il carico del tuo database.

    Molte soluzioni famose di caching del bytecode ti permettono anche di mettere in cache dati personalizzati, dunque ci sono ancora pi ragioni per trarne vantaggio. APCu, XCache e WinCache forniscono tutti API per salvare dati dal tuo codice PHP nella loro memoria cache.

    I sistemi di caching degli oggetti pi comunemente usati sono APCu e memcached. APCu una scelta eccellente per il caching degli oggetti. Include una semplice API per aggiungere i tuoi dati alla sua memoria cache ed molto semplice da configurare e usare. Lunica vera limitazione di APCu che legato al Web server su cui installato. Memcached, invece, installato come un servizio separato e pu essere letto dalla rete, il che significa che puoi memorizzare oggetti in un data store super-veloce in una posizione centrale e molti sistemi diversi possono accedervi.

    Nota che quando esegui PHP come unapplicazione (Fast-)CGI nel tuo Web server, ogni processo PHP avr la sua cache (i dati di APCu non sono condivisi tra i processi). In questi casi, potresti voler usare memcached, che non

  • legato ai processi PHP.

    In una configurazione di rete APCu sar generalmente pi performante di memcached in termini di velocit di accesso, ma memcached potr scalare meglio e pi velocemente. Se non pensi di eseguire la tua applicazioni su server multipli, o non ti servono le funzionalit aggiuntive che memcached offre, allora APCu probabilmente la scelta migliore per il caching degli oggetti.

    Esempio di utilizzo con APCu:

  • class DateTimeHelper{ /** * @param mixed $anything Qualunque cosa che si possa convertire in un oggetto \DateTime * * @throws \InvalidArgumentException * * @return \DateTime */ public function dateTimeFromAnything($anything) { $type = gettype($anything);

    switch ($type) { // Del codice che prova a restituire un oggetto \DateTime }

    throw new \InvalidArgumentException( "Failed Converting param of type '{$type}' to DateTime object" ); }

    /** * @param mixed $date Qualunque cosa che si possa convertire in un oggetto \DateTime * * @return void */ public function printISO8601Date($date) { echo $this->dateTimeFromAnything($date)->format('c'); }

    /** * @param mixed $date Qualunque cosa che si possa convertire in un oggetto \DateTime */ public function printRFC2822Date($date) { echo $this->dateTimeFromAnything($date)->format('r'); }}

    La documentazione della classe ha un tag @author e un tag @link. Il tag @author usato per documentare lautore del codice e pu essere ripetuto per documentare pi autori. Il tag @link usato per linkare a un sito web che ha una relazione col codice.

    Dentro la classe, il primo metodo ha un tag @param che documenta il tipo, il nome e la descrizione del parametro passato al metodo. Inoltre, ha dei tag @return e @throws che documentano rispettivamente il tipo restituito e qualunque eccezione che potrebbe essere lanciata.

    Il secondo e il terzo metodo sono molto simili e hanno un solo tag @param come il primo metodo. La differenza importante nel secondo e terzo metodo linclusione/esclusione del tag @return. @return void informa

  • esplicitamente che non sar restituito nulla; storicamente, omettere la dichiarazione @return void ha lo stesso significato (nessuna restituzione).

    Torna su

    Risorse

    Ufficiali

    Sito di PHPDocumentazione di PHP

    Persone da seguire

    Rasmus LerdorfFabien PotencierDerick RethansChris ShiflettSebastian BergmannMatthew Weier OPhinneyPdraic BradyAnthony FerraraNikita Popov

    Mentoring

    phpmentoring.org - Mentoring formale, peer to peer nella comunit PHP.

    Provider PaaS PHP

    PagodaBoxAppFogHerokufortrabbitEngine Yard CloudRed Hat OpenShift PlatformdotCloudAWS Elastic BeanstalkcloudControlWindows AzureGoogle App EngineJelastic

    Framework

  • Piuttosto che reinventare la ruota, molti provider PHP usano dei framework per costruire le proprie applicazioni. I framework astraggono la maggior parte dei dettagli di basso livello e forniscono delle utili interfacce di semplice utilizzo per realizzare molte funzionalit comuni.

    Non hai bisogno di un framework per ogni progetto. A volte il solo PHP il modo giusto per realizzare le cose, ma se hai bisogno di un framework, ce ne sono tre tipi:

    Micro-frameworkFramework completiFramework a componenti

    I micro-framework forniscono essenzialmente un modo per mappare una richiesta HTTP a un callback, un controller o un metodo il pi velocemente possibile, e a volte forniscono alcune libreria extra per aiutare nello sviluppo come librerie di base per il database e cose del genere. Sono prevalentemente usati nella costruzione di servizi HTTP remoti.

    Molti framework aggiungono un nome considerevole di funzionalit a quelle disponibili in un micro-framework; questi vengono detti framework completi. Di solito sono distribuiti con degli ORM, pacchetti per lautenticazione etc.

    I framework a componenti sono insiemi di librerie specializzate e con una sola responsabilit. Diversi framework a componenti possono essere usati insieme per creare un micro-framework o un framework completo.

    Framework PHP popolari

    Componenti

    Come menzionato sopra, i componenti sono un altro approccio alla creazione, distribuzione e implementazione di codice condiviso. Esistono diversi repository di componenti; i due pi famosi sono:

    PackagistPEAR

    Entrambi questo repository hanno degli strumenti da linea di comando associati per aiutarti nel processo di installazione e aggiornamento, e sono stati spiegati in dettaglio nella sezione Gestione delle dipendenze.

    Ci sono anche dei framework a componenti e provider componenti che non offrono alcun framework. Questi progetti forniscono solo unaltra sorgente di pacchetti che idealmente hanno poche o nessuna dipendenza verso altri pacchetti o framework specifici.

    Per esempio, puoi usare il pacchetto Validation di FuelPHP senza dover usare il framework FuelPHP.

    AuraFuelPHPHoa ProjectOrnoComponenti di SymfonyThe League of Extraordinary PackagesComponenti Illuminate di Laravel

    Eloquent ORMQueue

  • I componenti Illuminate di FuelPHP saranno meglio separati dal framework Laravel. Per ora, solo i componenti meglio separati sono elencati sopra.

    Altre risorse utili

    Cheatsheet

    PHP Cheatsheets - per le comparazioni tra variabili, le operazioni aritmetiche e i test di variabili in varie versioni di PHPPHP Security Cheatsheet

    Altre pratiche raccomandate

    PHP Best PracticesBest practices for Modern PHP Development

    Luniverso PHP

    PHP Developer blog

    Video tutorial

    Canali Youtube

    PHP AcademyThe New BostonSherif RamadanLevel Up Tuts

    Video a pagamento

    Standards and Best practicesPHP Training su PluralsightPHP Training su Lynda.comPHP Training su Tutsplus

    Libri

    Ci sono un sacco di libri in giro su PHP, ma alcuni sono molto vecchi e non contengono pi informazioni accurate. Ci sono anche libri pubblicati per PHP 6 che non esiste, e non esister mai. La prossima versione di PHP sar chiamata PHP 7 per via di questi libri.

    Questa sezione mira a essere un documento in costante aggiornamento sui libri raccomandati per lo sviluppo PHP in generale. Se vuoi che il tuo libro sia aggiunto, invia una PR e sar presa in esame.

    Libri gratuiti

    PHP The Right Way - Questo sito web disponibile in maniera completamente gratuita come libro.

  • Libri a pagamento

    Modernizing Legacy Applications In PHP - Metti il tuo codice sotto controllo in una serie di piccoli e specifici passiBuilding Secure PHP Apps - Impara le basi di sicurezza che uno sviluppatore anziano di solito acquisisce solitamente in anni di esperienza; il tutto condensato in una pratica guidaThe Grumpy Programmers Guide To Building Testable PHP Applications

    Imparare a scrivere codice testabile non deve per forza fare schifo.Securing PHP: Core Concepts - Una guida ad alcuni dei termini di sicurezza pi comuni; fornisce esempi del loro utilizzo quotidiano in PHPScaling PHP - Smetti di giocare al sysadmin e torna a programmareSignaling PHP - I segnali PCNLT sono di grande aiuto quando si scrivono script PHP per la linea di comando.

    Torna su

    ComunitLa comunit PHP tanto diversificata quanto grande, e i suoi membri sono pronti e desiderosi di aiutare i nuovi programmatori PHP. Considera lidea di entrare nel tuo gruppo PHP locale (PUG) o di partecipare a conferenze PHP pi grandi per avere maggiori informazioni sulle pratiche qui descritte. Puoi passare nel canale IRC #phpc su irc.freenode.com e seguire laccount Twitter @phpc. Fatti vedere, incontra nuovi sviluppatori, impara nuove cose e, soprattutto, fai nuovi amici! Altre risorse della comunit includono la Comunit programmatori PHP su Google+ e StackOverflow.

    Guarda il calendario ufficiale degli eventi PHP

    PHP User Groups

    If you live in a larger city, odds are theres a PHP user group nearby. You can easily find your local PUG at the usergroup-list at php.net which is based upon PHP.ug. Alternate sources might be Meetup.com or a search for php user group near me using your favourite search engine (i.e. Google). If you live in a smaller town, there may not be a local PUG; if thats the case, start one!

    Special mention should be made of two global user groups: NomadPHP and PHPWomen. NomadPHP offers twice monthly online user group meetings with presentations by some of the top speakers in the PHP community. PHPWomen is a non-exclusive user group originally targeted towards the women in the PHP world. Membership is open to everyone who supports a more diverse community. PHPWomen provide a network for support, mentorship and education, and generally promote the creating of a female friendly and professional atmosphere.

    Read about User Groups on the PHP Wiki

    Conferenze PHP

    La comunit PHP tiene anche delle conferenze regionali e nazionali in molti Paesi in tutto il mondo. A questi eventi parlano generalmente membri noti della comunit PHP, dunque una buona opportunit per imparare direttamente dai leader del settore.

    Trova una conferenza PHP

  • Torna su

    Riconoscimenti

    Creato e manutenuto daJosh Lockhart

    Collaboratori del progettoKris Jordan

    Phil Sturgeon

    Contributori del progettophilsturgeon

    codeguypeterkokotKrisJordan

    grakicjrfnl

    stevenbennerphilipobenito

    maglnetylynfattchartjes

    markushausammannXosofox

    rogeriopradojaranw

    zeroeccoccirello

    gerardrocheauroraeosrose

    eoconnellgaroevans

    briannesbittNeilMasters

    getjumpInoryy

    wilmoorejohnstevensonbocharsky-bw

    chriscct7Blackshawk

    astormreininkmc10

    telephonepadraic

    Sean-Der

  • Sgoettschkessurajprogrammez

    tvlooydeadlyhifi

    ziadozsinglesjcloutziflista

    enygmagaldiolo

    coreymcmahondave1010

    djoosonethumbericmartel

    echernyavskiyFlorianWoltersfrankperez87

    hannesvdvrekenjkobusifdatticJayin

    jcarouthafholejwpage

    josh-mcqkayladnls

    m92oThaDafinser

    mathrocmattkirwaninanimatt

    akshayagarwalceleritas17

    rhynodesignsshahariaazamsimonrjones

    cn007bzsuraskikenden

    marian-rmkaatman

    ostarkhariktelfet

    mattbastaalimac

    heiglandreaslocalheinz

    deviantintegralapinstein

    tonicospinelli

  • ArloLArtemGordinsky

    aykutfarsakbartosz-maciaszek

    benedmundsappleboy

    BradEsteybramusbcrowe

    chaseconeydrbyte

    smoakey