Raccolgo in questo post diversti trucchi e finezze per PHP utili sia ai principianti che ai professionisti.
- Usa sempre un layer di accesso al database (MySQL Connection Class) come PEAR:MDB2
- Gestire Magic Quotes. La direttiva magic_quotes è utile per prevenire attacchi di SQL injection , però è necessario saper gestire i suoi effetti e rendere il codice indipendente da come questa direttiva è impostata sul server. Questa funzione può fare al caso nostro:
function magicQuotes($post) {if (get_magic_quotes_gpc()) {
if (is_array($post) {
return array_map('stripslashes',$post);
} else {
return stripslashes($post);
}
} else {
return; // magic quotes are not ON so we do nothing
}}
- Sicurezza nelle query. Usa mysql_real_escape_string prima di ogni inserimento nel DB (oppure usa gli prepare statement di MDB2)
- Debugging. Usa error_reporting(E_ALL); all'inzio dello script per vedere tuti gli errori/warning/notice oppure usa delle print_r o dei var_dump per verificare il contenuto di una variabile. Ricordati in produzione di usare però error_reporting(0);
- Programma ad oggetti, sempre. Organizza il tuo codice e non scrivere mai 2 volte del codice che fa le stesse cose.
- Single Quotes (') e Double Quotes (") sono molto differenti.
- $row[’id’] è 7 volte più veloce che $row[id] perchè nel secondo caso php pensa che id sia una etichetta (define) e perde tempo a cercare dove è definita
- Non usare funzioni all'interno di cicli come for ($x=0; $x < count($array); $x) La funzione count() viene chiamata ogni volta quando ne bastava una prima del ciclo $conteggio = count($array); for ($x=0; $x < $conteggio; $x);
- Se un metodo puoi considerlarlo statico , dichiaralo così! La velocità aumenta di 4 volte!
- Evita funzioni del tipo __get, __set, __autoload
- require_once() è più pesante che il semplice require() perchè costringe php ha 'ricordarsi' se un file è già stato incluso o meno
- Usa full paths negli include/require/etc.. guadagnerai tempo che altrimenti andrebbe speso per risolvere il path relativo
- Per avere l'ora a cui è stato lanciato lo script usa $_SERVER[’REQUEST_TIME’] invece che time()
- strncasecmp, strpbrk e stripos sono più veloci che regex
- preg_replace è più veloce che str_replace; la stessa cosa non vale per strtr che è più veloce preg_replace di 4 volte
- La soppressione dell'errore con @ è molto lenta. Evitala.
- Gestire gli errori è costoso, ma volte conviene. Valuta bene.
- Usa ip2long() e long2ip() per salvare indirizzi IP come interi invece che come stringa (risparmierai spazio e aumenterai velocità di calcolo per eventuali ricerchè/valutazioni)
- Valida parzialmente un'indirizzo mail vedendo se esiste il dominio con la funzione checkdnsrr()
- Usa quando puoi l'operatore ternario "?:"
- Usa gzcompress() e gzuncompress() per comprimere delle stringhe prima di salvarle in campi BLOB nel database (guadagni fino al 90% di spazio). Se però ti serve l'indicizzamento full text evita questo metodo
- Se vuoi che una funzione ritorni valori multipli (senza sprecare eccessiva memoria) usa dei parametri passati per riferimento ('&' prima del $nomeVariabile)
[fonti: PHPBuilder SitePoint Moskalyuk Blog]





1. Elvis, Martedì 20 Novembre 2007 ore 14:11
Vorrei proporre un trucchetto che uso spesso per il debug:
A fine script:
<pre><? function f() {print_r ($GLOBALS);}
f(); ?></pre>
Stampa tutte le variabili del documento, comprese le superglobali ad albero
2. Piccolo Principe, Martedì 19 Febbraio 2008 ore 18:48
- $row[’id’] è 7 volte più veloce che $row[id]
Più che altro la seconda è un errore di sintassi.- Se un metodo puoi considerlarlo statico , dichiaralo così! La velocità aumenta di 4 volte!
Da dove arrivano questi dati?- Evita funzioni del tipo __get, __set, __autoload
__autoload è fondamentale per evitare lunghe liste di include e require.