Programmare in PHP evitando 3 errori molto comuni ma fatali

Programmare in PHP, per molti Sviluppatori anche se agli esordi con questo fantastico linguaggio, non risulta essere unā€™attivitĆ  complessa. Grazie a questo linguaggio, alla portata di chiunque, sviluppare software non ĆØ piĆ¹ un miraggio. Ma sfortunatamente commetterai 3 errori che comprometteranno, definitivamente, le funzionalitĆ  della tua web application.

In questa guida ti spiegherĆ² 3 errori da evitare, quando sviluppi software in PHP, che se presenti penalizzeranno il tuo software rendendolo di fatto inutilizzabile. PHP ĆØ un linguaggio di programmazione molto utilizzato per la creazione di web application e blog. Ma, PHP, come tutti i linguaggi, ha dei punti di forza ma anche istruzioni che se male utilizzate e parametrizzate possono produrre bug difficili da scovare.

Questi 3 errori, non vengono rilevati dallā€™interprete, infatti, per PHP pur essendo il codice, sintatticamente corretto, non risulta a volte eseguibile a causa delle differenti impostazioni dei sistemi operativi su cui verrĆ  eseguito il codice e il server web.

Ora, ti mostrerĆ² i 3 errori da evitare, nel programmare in PHP, per rendere la tua web application priva di bug.

Errore 1: Come includere script PHP 

Solitamente una web application ĆØ composta da tanti file PHP. Il file che fa da start-up della web app ĆØ solitamente index.php. Index.php, perĆ², non ĆØ lā€™unico file che conterrĆ  tutte le funzionalitĆ  della tua web app. Una web application ha a corredo anche centinaia di script in PHP e HTML opportunamente progettate e studiate ad-hoc.

Un programmatore in PHP, quindi, ha sempre la necessitĆ  di includere codice PHP da file esterni. PHP offre vari comandi che svolgono questa funzione. Parlo dei comandi include e require.

Questi comandi sono molto simili e possono essere utilizzati in modo intercambiabile. SarĆ  il programmatore a decidere quando utilizzare lā€™una o lā€™altra funzione. Anche se il lavoro svolto dai due comandi ĆØ pressochĆ© identico ci sono delle sostanziali differenze che ne permetteranno lā€™uso appropriato.

1.1 Il comando include o include_once

Il comando include, ad esempio, lavora al meglio delle sue possibilitĆ  quando ĆØ necessario includere file PHP, che se non essenziali o non includibili, genereranno solo un warning in fase di esecuzione dello script. Questo significa che il flusso di lavoro della web application continuerĆ  come se nulla fosse accaduto. In aggiunta al comando include vi ĆØ anche il comando include_once. Questo comando svolge la stessa identica funzione del comando include evitando, perĆ², di includere il file due volte.

Quando vengono utilizzati questi due comandi, a volte, si commette un errore molto comune, ma purtroppo fatale per la funzionalitĆ  del software. Come da manuale la sintassi corretta per include e include_once ĆØ questa:

// -------------
// index.php
// -------------
<?php 
   include(ā€˜file2.phpā€™); 
   // oppure
   include_once(ā€˜file3.phpā€™);
?>

In effetti, la sintassi del comando include, racchiude tra parentesi il file che deve essere incluso nello script chiamante ma che deve essere presente, perĆ², nella directory corrente. Ma qual ĆØ la directory corrente? CosƬ come riportato, file2.php e file3.php vengono cercati allā€™interno di questa directory che potrebbe non coincidere con la directory che contiene index.php. Per cui, quando si include un file php, ĆØ sempre meglio dare a include e include_once il percorso relativo, a partire da index.php, per raggiungere file2.php e file3.php. Quindi, il codice avrĆ  adesso questo aspetto:

 // -------------
// index.php
// -------------
<?php 
   include(dirname(__file__).ā€˜/file2.phpā€™); 
   // oppure
   include_once(dirname(__file__).ā€˜/file3.phpā€™);
?>

CosƬ avrai lā€™assoluta certezza che i due file, file2.php e file3.php, verranno cercati nella stessa cartella del file index.php. O comunque, se specificato, in unā€™altra subdirectory.

1.2 Il comando require o require_once

Il comando require, a differenza del comando include, lavora al meglio delle sue possibilitĆ  quando ĆØ necessario includere file PHP, che risultino essere essenziali ma che se non includibili, genereranno un errore in fase di esecuzione dello script. Questo significa che il flusso di lavoro della web application si bloccherĆ . In aggiunta al comando require vi ĆØ anche il comando require_once. Questo comando svolge la stessa identica funzione del comando require evitando, perĆ², di includere il file due volte.

Anche in questo caso, quando vengono utilizzati questi due comandi, a volte, si commette un errore molto comune, ma purtroppo fatale per la funzionalitĆ  del software. Quindi, come da manuale la sintassi corretta per require e require_once ĆØ questa:

// -------------
// index.php
// -------------
<?php 
   require(ā€˜file2.phpā€™); 
   // oppure
   require_once(ā€˜file3.phpā€™);
?>

Ora, come per include e include_once, quando si include un file php, ĆØ sempre meglio dare a require e require_once il percorso relativo, a partire da index.php, per raggiungere file2.php e file3.php. Quindi, il codice avrĆ  adesso questo aspetto:

 // -------------
// index.php
// -------------
<?php
   require(dirname(__file__).ā€˜/file2.phpā€™); 
   // oppure
   require_once(dirname(__file__).ā€˜/file3.phpā€™);
?>

Quindi, lā€™errore da evitare ĆØ quello di NON indicare a include e require il percorso relativo esatto per raggiungere lo script php da includere. E’ sempre meglio specificare il percorso del file PHP da includere per far capire all’interprete dove recuperare il file. Se il file da includere si trova nella stessa cartella del file che ne richiede l’inclusione utilizza sempre la funzione dirname(__file__) a cui accodare il nome del file da includere. In tutti gli altri caso specifica sempre un percorso che permetta all’interprete di recuperare con assoluta certezza il file.


LEGGI ANCHE: Come sviluppare web app CodeLess con WordPress, PHP e MySQL


Per fortuna con lā€™avvento del web 2.0, ormai diversi anni fa, ĆØ stato superato il problema sollevato da un ambiente senza stato di cui una pagina web soffre. Ad esempio, quando il server web spedisce il contenuto elaborato in PHP al browser, il browser sovrascrive il contenuto precedente con quello corrente ricevuto dal server web. Questo significa che, tutte le variabili, di conseguenza lo stato, della pagina web precedente, viene perso. Ecco perchĆ© il web ĆØ un ambiente senza stato. Grazie ai Cookie questo problema ĆØ stato superato. CioĆØ, il server web, puĆ² memorizzare variabili direttamente allā€™interno del browser senza perderne il contenuto, e quindi lo stato, nel passaggio da una pagina web allā€™altra.

PHP, come tutti i linguaggi lato server, puĆ² impostare cookie sfruttando la funzione di sistema setcookie(). Tutti i cookie impostati con la funzione setcookie vengono dapprima elaborati dal server web e successivamente inseriti nellā€™array globale $_COOKIE. Fino a quando il valore del cookie impostato con la funzione setcookie non viene inserito nellā€™array globale $_COOKIE il cookie non sarĆ  disponibile. Il problema ĆØ che a volte il server non riesce ad associare immediatamente il valore impostato da setcookie nellā€™array $_COOKIE. Causando cosƬ un cattivo funzionamento della pagina web. La soluzione ĆØ: ā€œForzare lā€™associazione del cookie nellā€™array $_COOKIEā€. Quindi qual ĆØ la procedura corretta da seguire per impostare un cookie in PHP? Eccola qui:

<?php
   setcookie(ā€˜nome_utenteā€™, ā€˜antonio.lamorgeseā€™, time()+3600);
   // aggiungere sempre dopo setcookie anche questa riga
   $_COOKIE[ā€˜nome_utenteā€™] = ā€˜antonio.lamorgeseā€™;
?>

Lā€™istruzione: $_COOKIE[ā€˜nome_utenteā€™] = ā€˜antonio.lamorgeseā€™; forza lā€™associazione del cookie allā€™interno dellā€™array globale $_COOKIE rendendolo subito disponibile. A questo punto ĆØ chiaro che il solo richiamo della funzione setcookie non finalizzerĆ  definitivamente la fase di creazione del cookie. E’ sempre meglio associare e forzare esplicitamente l’aggiornamento dell’array $_COOKIE, indicando il nome del cookie e il suo dato, subito dopo il richiamo della funzione setcookie.

Errore 3: Evita il tag di chiusura script in PHP

Si ĆØ capito, anche a seguito degli snippets di codice PHP utilizzati in questa guida, che in uno script PHP per poter eseguire codice PHP sono necessarie due condizioni:

1) Lo script, cioĆØ il file contenente le istruzioni, deve avere estensione php;

2) Il codice PHP deve essere racchiuso tra due tag, uno di apertura e uno di chiusura. Parlo di <?php e ?>.

Queste due condizioni sono necessarie per permettere al server web di eseguire codice PHP. Lā€™ultima condizione, ĆØ necessaria? CioĆØ il tag di chiusura ĆØ necessario? La risposta ĆØ NƬ. Anzi ĆØ meglio non inserirlo affatto quando il tag di chiusura ĆØ lā€™ultimo carattere presente in un file PHP.

Possiamo dire che oltre a non essere necessario, in quanto il server lo associa direttamente alla fine dello script se non presente, puĆ² causare anche qualche problema. Uno dei piĆ¹ diffusi ĆØ il classico “Header Already Sent”. Il tag di chiusura non ĆØ richiesto da PHP, e la sua omissione impedisce l’inserimento accidentale di spazi bianchi finali nella risposta. CioĆØ, se includi un file con spazi bianchi finali e imposti un cookie, lo spazio vuoto finale provocherĆ  un errore. Pertanto, non essendo necessario, ĆØ preferibile ometterlo.

Quindi ĆØ consigliabile sostituire il tag di chiusura con una riga di commento come questa:

/* End of file */

In questo video tutorial 3 consigli utili per ottimizzare al massimo il tuo codice PHP. Potrai capire come organizzare correttamente i tuoi script evitando gli errori piĆ¹ comuni che molti sviluppatori, non professionisti, fanno.

Come ottimizzare la scrittura di codice in PHP

LEGGI ANCHE: Come creare un software gestionale gratis con SQL Server e NodeJS


Antonio Lamorgese

Amministratore di rete e sviluppatore. Dopo anni di esperienza nel settore, ho ideato un sistema di gestione dati MYSQL in PHP senza scrivere una sola riga di codice. Scopri di piĆ¹....