SlideShare a Scribd company logo
Un progetto open source
cresciuto insieme al web




  Asmir Mustafic - Linux Day 2011
                        Pordenone
   Asmir Mustafic
    ◦ PHP: 8+ anni

    ◦ Lavoro @

    ◦ PUG Friuli

    ◦ http://linkedin.com/in/goetas




                            Asmir Mustafic - Linux Day 2011
                                                  Pordenone
Su le mani!




          Asmir Mustafic - Linux Day 2011
                                Pordenone
   Linguaggio di scripting (1995)
    ◦ Interpretato
   Orientato al web
   Open source (PHP License [non GPL])
   Popolare, scalabile, facile, ecc.




                         Asmir Mustafic - Linux Day 2011
                                               Pordenone
Quanto è cambiato il nostro mondo
negli ultimi 10 anni, con l’avvento
del era di internet?




          Asmir Mustafic - Linux Day 2011
                                Pordenone
   Wordpress
   PHP
   10M di download
   61M di blog attivi
   http://wordpress.com




                       Asmir Mustafic - Linux Day 2011
                                             Pordenone
   MediaWiki
   PHP
   Opensource
   Multidatabase
   Usato da Wikipedia
   http://www.mediawiki.org




                        Asmir Mustafic - Linux Day 2011
                                              Pordenone
   Search engine & more
   PHP
   Migrato da C/C++ a PHP nel 2002
   3.4 G pageview/day
   Uno dei leader del web attuale




                       Asmir Mustafic - Linux Day 2011
                                             Pordenone
   Social network
   PHP (hiphop)
   800M di utenti
   10K server
   http://facebook.com




                          Asmir Mustafic - Linux Day 2011
                                                Pordenone
   Ricerca campione su 10M domini
    ◦ 59% usa PHP
   40 dei 100 siti più vistati al mondo usa PHP
   6° posto dei linguaggi più popolari in
    assoluto (TIOBE Index Settembre 2011)




                          Asmir Mustafic - Linux Day 2011
                                                Pordenone
Perché dovrei scegliere PHP per il
mio prossimo progetto?
Cosa ha di buono?




           Asmir Mustafic - Linux Day 2011
                                 Pordenone
Open source



            Deployment
                                              Community
              rapido




Veloce &
                                                          Documentato
Scalabile




            Estensibile                          Facile



                          Completo &
                            Maturo




                               Asmir Mustafic - Linux Day 2011
                                                     Pordenone
“Si usa Java o .NET per fare i siti seri!”




            Asmir Mustafic - Linux Day 2011
                                  Pordenone
Uso                     Storia

                           1994
      Enterprise             ◦ Esperimenti per
                               appassionati
                           1998
                             ◦ Siti personali
           Small
                           2002
                             ◦ Semplici siti e mini portali
              Home           ◦ Blog e CMS
                           2008
                             ◦ Grandi siti
                             ◦ Istituzioni
                             ◦ Multinazionali

                     Asmir Mustafic - Linux Day 2011
                                           Pordenone
Si possono produrre pessime
applicazioni anche con ottimi linguaggi.




          Asmir Mustafic - Linux Day 2011
                                Pordenone
Vediamo tre semplici regole...




          Asmir Mustafic - Linux Day 2011
                                Pordenone
Pensare molto bene, prima di iniziare a
                       scrivere codice




                Asmir Mustafic - Linux Day 2011
                                      Pordenone
   Troverete la soluzione migliore
   Risolvere un problema in fase di progettazione
    costa davvero poco

    In fase di progettazione




         In fase di sviluppo




             In produzione




                                Ore di lavro

                               Asmir Mustafic - Linux Day 2011
                                                     Pordenone
Non reinventare la ruota




 Asmir Mustafic - Linux Day 2011
                       Pordenone
   Problematiche già risolte
    ◦ Da molto tempo (soluzioni mature)
    ◦ Nel migliore dei modi
    ◦ Da molte persone (anche da esperti del problema)

   Risparmi tempo e fatica

   Ma se siete davvero sicuri di voi stessi, allora
    si può provare...



                            Asmir Mustafic - Linux Day 2011
                                                  Pordenone
Non essere rigidi




Asmir Mustafic - Linux Day 2011
                      Pordenone
   Non avrete tempo
   Non avrete voglia
   Vorrete provare (bene o male che
    vada, imparerete qualcosa!)
   Dovrete migliorare la ruota

   Se non si cambia, non si migliora, si perde in
    partenza!



                          Asmir Mustafic - Linux Day 2011
                                                Pordenone
Le “regole” sono tante altre…
#tu, #cliente, #capo, #team,
#specifiche, ecc.




          Asmir Mustafic - Linux Day 2011
                                Pordenone
Alcune “best practice” per
semplificare la vita...




          Asmir Mustafic - Linux Day 2011
                                Pordenone
   Aderite agli standard
    ◦ Aumenti la qualità                         Faciliti la collaborazione
   Richiedere gli standard


                                       Standard

       Soluzioni                                                                 Filesystem
                       Formattazione    Consistenza          Strumenti
    (architetturali)                                                           (nomenclatura)




                          Regola #2
                          Non reinventare la ruota
                                             Asmir Mustafic - Linux Day 2011
                                                                   Pordenone
   Commenti sul codice
    ◦ phpDocumentor
    ◦ PEAR UML (consigliato)
   Schemi e Diagrammi
    ◦ UML, ER, Wireframe, Workflow...
   Usate un wiki aziendale o DocBook...
   Usate un sistema di controllo versione



                 Regola #1
                 Pensare molto bene prima di iniziare a scrivere codice
                                Asmir Mustafic - Linux Day 2011
                                                      Pordenone
Centralizzato (SVN)                Distribuito (GIT)

   Server centrale                   Più repository
   Si lavora su copie locali          “principali”
   Migliore controllo                Si inviano le modifiche
    accessi                            ai propri “peer”
                                      Si sfuma il concetto di
                                       copia locale




                                Asmir Mustafic - Linux Day 2011
                                                      Pordenone
Controller
   Dividete in entità ben distinte:
    ◦ Dati (Model)
    ◦ Visualizzazione (View)
    ◦ Elaborazione (Controller)                        Model                 View



   Ogni classe/file/funzione assolve ad un solo
    compito (Single Responsibility Principle)!

   La maggior parte delle moderne applicazioni
    ereditano qualche principio da MVC.

                              Asmir Mustafic - Linux Day 2011
                                                    Pordenone
<?php
$res = mysql_query("SELECT * FROM utenti");
?>
<select name='utente'>
<?php
while($data = mysql_fetch_array($res)){
    echo "<option
            value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">";
    echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8');
    echo "</option>";
}
echo "</select>";




                                      Asmir Mustafic - Linux Day 2011
                                                            Pordenone
DATI
<?php
$res = mysql_query("SELECT * FROM utenti");
?>                                                         LOGICA
<select name='utente'>
<?php
while($data = mysql_fetch_array($res)){
    echo "<option
            value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">";
    echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8');
    echo "</option>";
}
echo "</select>";           PRESENTAZIONE



                                        SICUREZZA




                                      Asmir Mustafic - Linux Day 2011
                                                            Pordenone
<?php
$res = mysql_query("SELECT * FROM utenti");
?>
<select name='utente'>
<?php
while($data = mysql_fetch_array($res)){
    echo "<option
            value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">";
    echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8');
    echo "</option>";
}
echo "</select>";




    Basta con codice “groviglio”!
    Applicate i principi dell’MVC!


                                      Asmir Mustafic - Linux Day 2011
                                                            Pordenone
Controller
<?php
$utenti = getElencoUtenti();
display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected));

Model
<?php
function getElencoUtenti(){
    $res = mysql_query("SELECT * FROM utenti");
    return mysql_fetch_all($res) ;
}
View
<select name='name'>
     <? foreach($utenti as $ut): ?>
        <option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?>
        </option>
     <? endforeach ?>
</select>


                                      Asmir Mustafic - Linux Day 2011
                                                            Pordenone
Controller
<?php                                      Dati prelevati dal Model
$utenti = getElencoUtenti();
display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected));

Model
<?php
function getElencoUtenti(){
    $res = mysql_query("SELECT * FROM utenti");
    return mysql_fetch_all($res) ;
}
View
<select name='name'>
     <? foreach($utenti as $ut): ?>
        <option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?>
        </option>
     <? endforeach ?>
</select>


                                      Asmir Mustafic - Linux Day 2011
                                                            Pordenone
Controller
<?php
$utenti = getElencoUtenti();
                                          Dati visualizzati tramite la Vista
display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected));

Model
<?php
function getElencoUtenti(){
    $res = mysql_query("SELECT * FROM utenti");
    return mysql_fetch_all($res) ;
}
View
<select name='name'>
     <? foreach($utenti as $ut): ?>
        <option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?>
        </option>
     <? endforeach ?>
</select>


                                      Asmir Mustafic - Linux Day 2011
                                                            Pordenone
Database driver                            ORM

    PHP PDO                                  Doctrine 2
    Doctrine DBAL                            Propel
    Creole                                   dORM
    ADODB
    $user = new User();
    $user->setName('name');

    $orm->persist($user); // save
    $user = $orm->findByName('name');
    $orm->remove($user); // delete

                       Regola #2
                       Non reinventare la ruota
                       Model per MVC
                                        Asmir Mustafic - Linux Day 2011
                                                              Pordenone
Classico                                  XML Attribute Template

    Twig                                    ATal
    Smarty                                  PHPTAL
    Dwoo                                    Open Power Template
{if count($utenti)}                      <ul t:if="count($utenti)">
   <ul>                                     <li t:foreach="$utenti as $ut">
      {foreach from=$utenti item=ut}          {$ut->name}
        <li>                                </li>
          {$ut->name|escape}             </ul>
        </li>
      {/foreach}
   </ul>
{/if}


                     View per MVC

                                       Asmir Mustafic - Linux Day 2011
                                                             Pordenone
   Probabilmente
    ◦   Penserete meglio a ciò che fate (Regola #1)
    ◦   Non reinventerete la ruota (Regola #2)
    ◦   Sarete aperti al cambiamento (Regola #3)
    ◦   Applicherete MVC

   Probabilmente
    ◦   Il risultato sarà più standard
    ◦   Userete un Template Engine
    ◦   Userete un ORM
    ◦   Sfrutterete gli strumenti offerti (se fanno al caso vostro)
    ◦   L’applicazione sarà più sicura
    ◦   ecc.

   Otterrete migliori risultati con meno sforzo!

                                     Asmir Mustafic - Linux Day 2011
                                                           Pordenone
   Non esiste il framework migliore
   Non esiste il framework peggiore

   Esiste il framework più adatto!

   Scegliete il vostro
    ◦ Orizzontale? Verticale?
    ◦ PHP4? 5? 5.3+?
    ◦ ecc.                      Zend Framework, Symfony, Kohana, eZ
                                Components, Yii,, CakePHP, Lithium,
                                Code Igniter e troppi altri!


                                Asmir Mustafic - Linux Day 2011
                                                      Pordenone
   Scrivete i test
    ◦ Applicate modifiche senza il terrore di “rompere”
      l’applicazione
    ◦ PHPUnit (standard de facto)
   Pensate sempre alla sicurezza
   Tenete sotto controllo le prestazioni
   Usate un IDE “serio”
    ◦ Eclipse, Zend Studio, Aptana, NetBeans, Komodo
   Usate un debugger
    ◦ Xdebug, Zend Debugger
   Provate
    ◦ Phing, Jenkins, Redmine


                                Asmir Mustafic - Linux Day 2011
                                                      Pordenone
   Uno dei modi migliori per mantenersi
    aggiornati e al passo con i tempi è
    partecipare al mondo open source.




                         Asmir Mustafic - Linux Day 2011
                                               Pordenone
Domande?




           Asmir Mustafic - Linux Day 2011
                                 Pordenone
   PHP http://php.net                                  Yii http://www.yiiframework.com/
   Zend Framework http://framework.zend.com            Lithium http://lithify.me/
   Symfony http://symfony.com
                                                        Kohana http://kohanaframework.org/
   eZComponents http://ezcomponents.org
    http://incubator.apache.org/zetacomponents/         Eclipse http://www.eclipse.org
   CakePHP http://cakephp.org/                         Zend Studio http://www.zend.com/products/studio
   Twig http://twig-project.com                        Net beans http://netbeans.org/
   ATal http://opensource.mercuriosistemi.com
                                                        Komodo http://www.activestate.com/komodo-ide
   Dwoo http://dwoo.com
   Smarty http://smarty.net                            Aptana http://www.aptana.com/
   OpenPowerTemplate http://www.invenzzia.org          Xdebug http://xdebug.org/
   Subversion http://subversion.apache.org
   GIT http://git-scm.com
   PHPUnit http://phpunit.de
   SipleTest http://www.simpletest.org/
   Doctrine http://www.doctrine-project.org/
   dOrm http://getdorm.com
   Propel http://www.propelorm.org/
   Pear http://pear.php.net
   phpDocumentor http://www.phpdoc.org/
   Phing http://www.phing.info
   Jenkins http://jenkins-ci.com
   Redmine http://redmine.com




                                                  Asmir Mustafic - Linux Day 2011
                                                                        Pordenone
   php.net
   phpadvent.com
   rogchap.com
   www.slideshare.net/weppos
   wikipedia.com
   zend.com
   langpop.com
   wordpress.com
   www.slideshare.net/dlondero
   joind.in/talk/view/65

                        Asmir Mustafic - Linux Day 2011
                                              Pordenone

More Related Content

PPT
Profilazione di applicazioni PHP con XHProf.
ODP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
PDF
Lezione WordPress Università degli Studi di Milano: Installazione e Gestione
PPT
08 09 26 Hyves At Picnic
PDF
Creativity and graphic design 3
PDF
Portfolio of Expertise and Credentials
ODP
Presentazione Blog Università la Sapienza
PPT
Il Backup Di Word Press
Profilazione di applicazioni PHP con XHProf.
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Lezione WordPress Università degli Studi di Milano: Installazione e Gestione
08 09 26 Hyves At Picnic
Creativity and graphic design 3
Portfolio of Expertise and Credentials
Presentazione Blog Università la Sapienza
Il Backup Di Word Press

Viewers also liked (19)

ODP
Joomla fap-joomla-day-2012
PDF
Media tools e significati simbolici 11 aprile 2014 Orient@ti
PDF
2 regole del corso tecniche di modellazione digitale – computer 3d
PDF
Laboratori e Workshop
PDF
Wordpress Installation for Windows and Mac
PDF
Luigi ricca portfolio
PDF
Misurazione del video sul Web
PDF
Creativity and graphic design 4
PDF
Internet e animazione
PDF
Corso PHP ENAIP - lezione #01 - 17/01/2014
PPTX
PDF
Musica, illustrazione e social media: una storia da raccontare
PPT
PHP:funzioni e interazione con MySQL
PPTX
Decustruzione progetto e mood board
PDF
exhibition design 2_misure standard/grafica
PDF
Workshop lezione_3_stand
PDF
Note per workshop Stop Motion Seconda Parte
PDF
Tecniche di modellazione 3d metodo progettuale
PPT
PHP: strutture di controllo e funzioni
Joomla fap-joomla-day-2012
Media tools e significati simbolici 11 aprile 2014 Orient@ti
2 regole del corso tecniche di modellazione digitale – computer 3d
Laboratori e Workshop
Wordpress Installation for Windows and Mac
Luigi ricca portfolio
Misurazione del video sul Web
Creativity and graphic design 4
Internet e animazione
Corso PHP ENAIP - lezione #01 - 17/01/2014
Musica, illustrazione e social media: una storia da raccontare
PHP:funzioni e interazione con MySQL
Decustruzione progetto e mood board
exhibition design 2_misure standard/grafica
Workshop lezione_3_stand
Note per workshop Stop Motion Seconda Parte
Tecniche di modellazione 3d metodo progettuale
PHP: strutture di controllo e funzioni
Ad

Similar to PHP: Un progetto open source cresciuto insieme al web (20)

PDF
Il Comune di Modena e l'Open Source
 
PDF
La Unix Way vista da un DevOps
PDF
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!
PDF
Linux, una rivoluzione accidentale
PDF
Presentazione framework Symfony
PDF
Linuxday2011
PDF
Mainardi Stefano 0001
PDF
Hax N°6 Versione Speciale Linuxday 2008
PDF
Da 0 all'open per PA e PMI
PDF
Da Zero all'open per PA e PMI
ODP
Windows vs-linux
PDF
ICT: dall'impresa alla PA e ritorno. Racconto di un'esperienza vissuta
ODP
PHP User Group Pavia - Gruppo Utenti e Sviluppatori PHP di Pavia e Provincia
PDF
La rivoluzione dei Microservizi
PDF
Curriculum Vitae
PDF
Modernize Legacy Systems with Kubernetes
PDF
Linuxday2007
PDF
Flt.lab Presentazione Aziendale
PDF
LinuxDay2012 - Il Software Libero come strategia d'impresa - StartUpSolutions
ODP
Document Freedom Day 2012: Open nella PA - Istat
Il Comune di Modena e l'Open Source
 
La Unix Way vista da un DevOps
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!
Linux, una rivoluzione accidentale
Presentazione framework Symfony
Linuxday2011
Mainardi Stefano 0001
Hax N°6 Versione Speciale Linuxday 2008
Da 0 all'open per PA e PMI
Da Zero all'open per PA e PMI
Windows vs-linux
ICT: dall'impresa alla PA e ritorno. Racconto di un'esperienza vissuta
PHP User Group Pavia - Gruppo Utenti e Sviluppatori PHP di Pavia e Provincia
La rivoluzione dei Microservizi
Curriculum Vitae
Modernize Legacy Systems with Kubernetes
Linuxday2007
Flt.lab Presentazione Aziendale
LinuxDay2012 - Il Software Libero come strategia d'impresa - StartUpSolutions
Document Freedom Day 2012: Open nella PA - Istat
Ad

PHP: Un progetto open source cresciuto insieme al web

  • 1. Un progetto open source cresciuto insieme al web Asmir Mustafic - Linux Day 2011 Pordenone
  • 2. Asmir Mustafic ◦ PHP: 8+ anni ◦ Lavoro @ ◦ PUG Friuli ◦ http://linkedin.com/in/goetas Asmir Mustafic - Linux Day 2011 Pordenone
  • 3. Su le mani! Asmir Mustafic - Linux Day 2011 Pordenone
  • 4. Linguaggio di scripting (1995) ◦ Interpretato  Orientato al web  Open source (PHP License [non GPL])  Popolare, scalabile, facile, ecc. Asmir Mustafic - Linux Day 2011 Pordenone
  • 5. Quanto è cambiato il nostro mondo negli ultimi 10 anni, con l’avvento del era di internet? Asmir Mustafic - Linux Day 2011 Pordenone
  • 6. Wordpress  PHP  10M di download  61M di blog attivi  http://wordpress.com Asmir Mustafic - Linux Day 2011 Pordenone
  • 7. MediaWiki  PHP  Opensource  Multidatabase  Usato da Wikipedia  http://www.mediawiki.org Asmir Mustafic - Linux Day 2011 Pordenone
  • 8. Search engine & more  PHP  Migrato da C/C++ a PHP nel 2002  3.4 G pageview/day  Uno dei leader del web attuale Asmir Mustafic - Linux Day 2011 Pordenone
  • 9. Social network  PHP (hiphop)  800M di utenti  10K server  http://facebook.com Asmir Mustafic - Linux Day 2011 Pordenone
  • 10. Ricerca campione su 10M domini ◦ 59% usa PHP  40 dei 100 siti più vistati al mondo usa PHP  6° posto dei linguaggi più popolari in assoluto (TIOBE Index Settembre 2011) Asmir Mustafic - Linux Day 2011 Pordenone
  • 11. Perché dovrei scegliere PHP per il mio prossimo progetto? Cosa ha di buono? Asmir Mustafic - Linux Day 2011 Pordenone
  • 12. Open source Deployment Community rapido Veloce & Documentato Scalabile Estensibile Facile Completo & Maturo Asmir Mustafic - Linux Day 2011 Pordenone
  • 13. “Si usa Java o .NET per fare i siti seri!” Asmir Mustafic - Linux Day 2011 Pordenone
  • 14. Uso Storia  1994 Enterprise ◦ Esperimenti per appassionati  1998 ◦ Siti personali Small  2002 ◦ Semplici siti e mini portali Home ◦ Blog e CMS  2008 ◦ Grandi siti ◦ Istituzioni ◦ Multinazionali Asmir Mustafic - Linux Day 2011 Pordenone
  • 15. Si possono produrre pessime applicazioni anche con ottimi linguaggi. Asmir Mustafic - Linux Day 2011 Pordenone
  • 16. Vediamo tre semplici regole... Asmir Mustafic - Linux Day 2011 Pordenone
  • 17. Pensare molto bene, prima di iniziare a scrivere codice Asmir Mustafic - Linux Day 2011 Pordenone
  • 18. Troverete la soluzione migliore  Risolvere un problema in fase di progettazione costa davvero poco In fase di progettazione In fase di sviluppo In produzione Ore di lavro Asmir Mustafic - Linux Day 2011 Pordenone
  • 19. Non reinventare la ruota Asmir Mustafic - Linux Day 2011 Pordenone
  • 20. Problematiche già risolte ◦ Da molto tempo (soluzioni mature) ◦ Nel migliore dei modi ◦ Da molte persone (anche da esperti del problema)  Risparmi tempo e fatica  Ma se siete davvero sicuri di voi stessi, allora si può provare... Asmir Mustafic - Linux Day 2011 Pordenone
  • 21. Non essere rigidi Asmir Mustafic - Linux Day 2011 Pordenone
  • 22. Non avrete tempo  Non avrete voglia  Vorrete provare (bene o male che vada, imparerete qualcosa!)  Dovrete migliorare la ruota  Se non si cambia, non si migliora, si perde in partenza! Asmir Mustafic - Linux Day 2011 Pordenone
  • 23. Le “regole” sono tante altre… #tu, #cliente, #capo, #team, #specifiche, ecc. Asmir Mustafic - Linux Day 2011 Pordenone
  • 24. Alcune “best practice” per semplificare la vita... Asmir Mustafic - Linux Day 2011 Pordenone
  • 25. Aderite agli standard ◦ Aumenti la qualità Faciliti la collaborazione  Richiedere gli standard Standard Soluzioni Filesystem Formattazione Consistenza Strumenti (architetturali) (nomenclatura) Regola #2 Non reinventare la ruota Asmir Mustafic - Linux Day 2011 Pordenone
  • 26. Commenti sul codice ◦ phpDocumentor ◦ PEAR UML (consigliato)  Schemi e Diagrammi ◦ UML, ER, Wireframe, Workflow...  Usate un wiki aziendale o DocBook...  Usate un sistema di controllo versione Regola #1 Pensare molto bene prima di iniziare a scrivere codice Asmir Mustafic - Linux Day 2011 Pordenone
  • 27. Centralizzato (SVN) Distribuito (GIT)  Server centrale  Più repository  Si lavora su copie locali “principali”  Migliore controllo  Si inviano le modifiche accessi ai propri “peer”  Si sfuma il concetto di copia locale Asmir Mustafic - Linux Day 2011 Pordenone
  • 28. Controller  Dividete in entità ben distinte: ◦ Dati (Model) ◦ Visualizzazione (View) ◦ Elaborazione (Controller) Model View  Ogni classe/file/funzione assolve ad un solo compito (Single Responsibility Principle)!  La maggior parte delle moderne applicazioni ereditano qualche principio da MVC. Asmir Mustafic - Linux Day 2011 Pordenone
  • 29. <?php $res = mysql_query("SELECT * FROM utenti"); ?> <select name='utente'> <?php while($data = mysql_fetch_array($res)){ echo "<option value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">"; echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8'); echo "</option>"; } echo "</select>"; Asmir Mustafic - Linux Day 2011 Pordenone
  • 30. DATI <?php $res = mysql_query("SELECT * FROM utenti"); ?> LOGICA <select name='utente'> <?php while($data = mysql_fetch_array($res)){ echo "<option value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">"; echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8'); echo "</option>"; } echo "</select>"; PRESENTAZIONE SICUREZZA Asmir Mustafic - Linux Day 2011 Pordenone
  • 31. <?php $res = mysql_query("SELECT * FROM utenti"); ?> <select name='utente'> <?php while($data = mysql_fetch_array($res)){ echo "<option value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">"; echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8'); echo "</option>"; } echo "</select>";  Basta con codice “groviglio”!  Applicate i principi dell’MVC! Asmir Mustafic - Linux Day 2011 Pordenone
  • 32. Controller <?php $utenti = getElencoUtenti(); display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected)); Model <?php function getElencoUtenti(){ $res = mysql_query("SELECT * FROM utenti"); return mysql_fetch_all($res) ; } View <select name='name'> <? foreach($utenti as $ut): ?> <option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?> </option> <? endforeach ?> </select> Asmir Mustafic - Linux Day 2011 Pordenone
  • 33. Controller <?php Dati prelevati dal Model $utenti = getElencoUtenti(); display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected)); Model <?php function getElencoUtenti(){ $res = mysql_query("SELECT * FROM utenti"); return mysql_fetch_all($res) ; } View <select name='name'> <? foreach($utenti as $ut): ?> <option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?> </option> <? endforeach ?> </select> Asmir Mustafic - Linux Day 2011 Pordenone
  • 34. Controller <?php $utenti = getElencoUtenti(); Dati visualizzati tramite la Vista display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected)); Model <?php function getElencoUtenti(){ $res = mysql_query("SELECT * FROM utenti"); return mysql_fetch_all($res) ; } View <select name='name'> <? foreach($utenti as $ut): ?> <option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?> </option> <? endforeach ?> </select> Asmir Mustafic - Linux Day 2011 Pordenone
  • 35. Database driver ORM  PHP PDO  Doctrine 2  Doctrine DBAL  Propel  Creole  dORM  ADODB $user = new User(); $user->setName('name'); $orm->persist($user); // save $user = $orm->findByName('name'); $orm->remove($user); // delete Regola #2 Non reinventare la ruota Model per MVC Asmir Mustafic - Linux Day 2011 Pordenone
  • 36. Classico XML Attribute Template  Twig  ATal  Smarty  PHPTAL  Dwoo  Open Power Template {if count($utenti)} <ul t:if="count($utenti)"> <ul> <li t:foreach="$utenti as $ut"> {foreach from=$utenti item=ut} {$ut->name} <li> </li> {$ut->name|escape} </ul> </li> {/foreach} </ul> {/if} View per MVC Asmir Mustafic - Linux Day 2011 Pordenone
  • 37. Probabilmente ◦ Penserete meglio a ciò che fate (Regola #1) ◦ Non reinventerete la ruota (Regola #2) ◦ Sarete aperti al cambiamento (Regola #3) ◦ Applicherete MVC  Probabilmente ◦ Il risultato sarà più standard ◦ Userete un Template Engine ◦ Userete un ORM ◦ Sfrutterete gli strumenti offerti (se fanno al caso vostro) ◦ L’applicazione sarà più sicura ◦ ecc.  Otterrete migliori risultati con meno sforzo! Asmir Mustafic - Linux Day 2011 Pordenone
  • 38. Non esiste il framework migliore  Non esiste il framework peggiore  Esiste il framework più adatto!  Scegliete il vostro ◦ Orizzontale? Verticale? ◦ PHP4? 5? 5.3+? ◦ ecc. Zend Framework, Symfony, Kohana, eZ Components, Yii,, CakePHP, Lithium, Code Igniter e troppi altri! Asmir Mustafic - Linux Day 2011 Pordenone
  • 39. Scrivete i test ◦ Applicate modifiche senza il terrore di “rompere” l’applicazione ◦ PHPUnit (standard de facto)  Pensate sempre alla sicurezza  Tenete sotto controllo le prestazioni  Usate un IDE “serio” ◦ Eclipse, Zend Studio, Aptana, NetBeans, Komodo  Usate un debugger ◦ Xdebug, Zend Debugger  Provate ◦ Phing, Jenkins, Redmine Asmir Mustafic - Linux Day 2011 Pordenone
  • 40. Uno dei modi migliori per mantenersi aggiornati e al passo con i tempi è partecipare al mondo open source. Asmir Mustafic - Linux Day 2011 Pordenone
  • 41. Domande? Asmir Mustafic - Linux Day 2011 Pordenone
  • 42. PHP http://php.net  Yii http://www.yiiframework.com/  Zend Framework http://framework.zend.com  Lithium http://lithify.me/  Symfony http://symfony.com  Kohana http://kohanaframework.org/  eZComponents http://ezcomponents.org http://incubator.apache.org/zetacomponents/  Eclipse http://www.eclipse.org  CakePHP http://cakephp.org/  Zend Studio http://www.zend.com/products/studio  Twig http://twig-project.com  Net beans http://netbeans.org/  ATal http://opensource.mercuriosistemi.com  Komodo http://www.activestate.com/komodo-ide  Dwoo http://dwoo.com  Smarty http://smarty.net  Aptana http://www.aptana.com/  OpenPowerTemplate http://www.invenzzia.org  Xdebug http://xdebug.org/  Subversion http://subversion.apache.org  GIT http://git-scm.com  PHPUnit http://phpunit.de  SipleTest http://www.simpletest.org/  Doctrine http://www.doctrine-project.org/  dOrm http://getdorm.com  Propel http://www.propelorm.org/  Pear http://pear.php.net  phpDocumentor http://www.phpdoc.org/  Phing http://www.phing.info  Jenkins http://jenkins-ci.com  Redmine http://redmine.com Asmir Mustafic - Linux Day 2011 Pordenone
  • 43. php.net  phpadvent.com  rogchap.com  www.slideshare.net/weppos  wikipedia.com  zend.com  langpop.com  wordpress.com  www.slideshare.net/dlondero  joind.in/talk/view/65 Asmir Mustafic - Linux Day 2011 Pordenone