Site icon Antonio Lamorgese

Programmare in PHP evitando 3 errori molto comuni ma fatali

programmare in php

Programmare in PHP evitando 3 errori che, se presenti, penalizzeranno il tuo software rendendolo di fatto inutilizzabile.
di Antonio Lamorgese

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


Exit mobile version