Vi è mai capitato di trattare alcune stringhe in PHP per dover calcolare la lunghezza di una frase e magari tagliarla dopo N caratteri?
E vi è capitato di fare queste operazioni con stringhe UTF-8 ?
In quest’ultimo caso, utilizzando le normali funzioni php substr o strlen, potrebbero capitare delle sorprese.
Ad esempio se il taglio della stringa avviene su un carattere accentato visualizzerete probabilmente un carattere incomprensibile!
provate ad eseguire questo codice:
echo substr(”Il lavoro più bello del mondo”,0,13);
E adesso provate invece ad eseguire questo:
echo mb_substr(”Il lavoro più bello del mondo”,0,13,’utf-8′);
Non è forse meglio???
N.B: idem per il calcolo di lunghezza di una stringa: usate mb_strlen e NON strlen!
Come fare a personalizzare il messaggio d’errore nel caso in cui fallisca l’inclusione di un file tramite l’istruzione include di PHP?
Io pensavo semplicemente di scrivere
require_once("path/to/myfile.php") or die("Couldn't load myfile");
Ebbene, questo codice è errato! Genera infatti un Fatal Error di questo tipo:
PHP Fatal error: require_once() : Failed opening required ‘1′ (include_path=’.;’) in code.php on line 1
Per risolvere questo “enigma” ecco la sintassi corretta (utilizzando include invece di require):
(@include_once 'myfile.php') or die("Couldn't load myfile.php");
Ho trovato un link interessante che spiega la necessità SEO di un header “503: Service Temporarily Unavailable” quando il sito viene messo in manutenzione oppure quando ci sono dei problemi sul frontend.
Ecco l’articolo dettagliato su www.askapache.com
Ecco poche righe di codice che permetto a uno script PHP di leggere un file SQL ed eseguirne le query!
$query = "";
$handle = @fopen($file_sql, "r");
if ($handle) {
mysql_query("START TRANSACTION", $dbh);
while (!feof($handle)) {
$query.= fgets($handle, 4096);
if (substr(rtrim($query), -1) == ';') {
if(!empty($query))
mysql_query($query, $dbh) or
die(mysql_error() . mysql_query("ROLLBACK"));
$query = '';
}
}
fclose($handle);
}
mysql_query("COMMIT", $dbh);
Ecco una funzione PHP molto interessante per il parsing dei file CSV: fgetcsv
Con questa funzione si possono leggere file in formato CSV e ottenere un array già formattato con i campi, da poter leggere riga per riga!
Le espressioni regolari sono uno strumento potentissimo di ricerca e gestione delle stringhe, in tutti i linguaggi di programmazione.
PHP mette a disposizione un particolare modificatore che somma le potenzialità delle RegExp con le possibilità offerte da PHP stesso…
Ad esempio… come fare a sostituire una parte di una stringa con il corrispondente minuscolo?
In pratica, se avessi una stringa “ciAo / ciaO / CIAO” e volessi sostituire SOLO la parola centrale per ottenere “ciAo / ciao / CIAO” ecco cosa potrei scrivere:
$stringa = “ciAo / ciaO / CIAO”;
$stringa = preg_replace(”#/([^/]+)/?#e“, “‘/’.strtolower(’\\1′).’/'”, $stringa);
Da notare infatti il modificatore e nel pattern della regex.
Dal manuale (qui) si legge infatti quanto segue:
e (PREG_REPLACE_EVAL)
If this modifier is set, preg_replace() does normal substitution of backreferences in the replacement string, evaluates it as PHP code, and uses the result for replacing the search string. Single quotes, double quotes, backslashes and NULL chars will be escaped by backslashes in substituted backreferences.
Only preg_replace() uses this modifier; it is ignored by other PCRE functions.
Come si fa a disabilitare il report dei notice (warning) PHP direttamente dal file htaccess?
Alcuni articoli in rete dicono che basta inserire questa istruzione nel file htaccess:
php_value error_reporting E_ALL & ~E_NOTICES
In realtà con php 5.2 questa riga potrebbe dare qualche errore!
Per disabilitare le notifiche, la stringa corretta è questa:
php_value error_reporting 6135
Ecco due motori di ricerca/spider scritti in PHP:
Entrambi hanno caratteristiche simili e un admin davvero intuitivo che permette di aggiungere siti da spiderizzare.
Sia phpDig che Sphider memorizzano le informazioni su database.
Per chi volesse invece memorizzare le pagine html su file binari… date un occhio a Lucene, che è stata inserita come libreria nello Zend Framework
Ho scaricato da poco il modulo aggiuntivo per Wamp che permette l’utilizzo di PHP 6… e così mi sono chiesto quali saranno le novità introdotte questa nuova major release.
Ed ecco la risposta, in un articolo di php.html.it
In breve:
- aggiunto supporto per Unicode
- pulizia delle funzionalità (verranno eliminate le librerie “deprecated” come ad esempio le GD 1)
- eliminate le vecchie librerie di accesso ai DB in favore delle PDO e SDO
- verranno aggiunte 2 librerie di gestione dell’XML: XMLReader e XMLWriter
- integrazione nativa di APC, Advanced PHP Cache
- migliorato il modello ad oggetti, reintroducendo i namespaces
Lunedì sera è stata rilasciata la preview release dello Zend Framework, versione 1.5.
Dalla 1.0.3 si è passati direttamente a questa nuova versione che introduce interessanti novità.
La più importante è quella che riguarda Zend_Layout, permettendo allo sviluppatore di scrivere un layout “globale” per la pagina html, e tanti “blocchi” da inserire all’interno della pagina contenitore.
E non è finita qui: sono stati aggiunti infatti diversi helper per la gestione dei meta tag, per l’inclusione dei javascript, dei css…
Rimando alla pagina della documentazione, con un’interessante visuale grafica di come può esser scritto un semplice layout:
Sample Layout
Devo ammettere che la documentazione ancora una volta non si è rivelata proprio completa… Per poter utilizzare le nuove funzionalità introdotte bisogna scavare un po’ nel codice o andare per intuizioni… ma le potenzialità di Zend_Layout sono davvero tante!
Interessanti anche le novità introdotte con Zend_Form, Zend_OpenId e scommetto ce ne siano altre!!!