SMsoft – informatica e dintorni

varie su OSX, GNU/Linux e l'Open Source

Aggiungere SQLite3 su CentOS

Con mia sorpresa, ho appurato che l’estensione php-sqlite installabile con yum su CentOS 5 contiene le librerie della versione 2 di sqlite.

Non ho trovato una versione precompilata delle librerie, ed allora ho ricompilato la libreria a mano. La procedura è semplice, solo che bisogna ricordarsi dopo ogni aggiornamento di PHP di ricompilare anche la libreria aggiornata.

Innanzitutto installare:

yum install php-devel

poi vanno scaricati i sorgenti della versione di PHP installata (es. la 5.3.8):

mkdir /usr/src/php
cd /usr/src/php
wget http://de.php.net/get/php-5.3.8.tar.gz/from/this/mirror
tar -zxvf php-5.3.8.tar.gz

poi bisogna accedere alla cartella con la libreria sqlite3:

cd php-5.3.8/ext/sqlite3/

va rinominato il file di configurazione:

cp config0.m4 config.m4

va preparato il codice per la compilazione:

phpize
./configure

ed infine si compila con:

make
make install

a questo punto basta creare il file per il caricamento della libreria, da chiamare /etc/php.d/sqlite3.ini con il seguente contenuto:

; Enable sqlite3 extension module
extension=sqlite3.so

ora basterà un:

php -i|grep -i sqlite3

per verificare di avere la libreria installata

PS: spero non ne me vogliate, mi piace sempre più Debian :-)

enjoy!

PHP 5.3.8 Released!

Ebbene si, un nuovo rilascio di PHP dagli sviluppatori è arrivato il 23.08.2011. Questo post non è tanto per segnalare il rilascio, ma piuttosto per evidenziare che gli sviluppatori informano che la serie 5.2 non sarà più supportata ed invitano ad effettuare l’aggiornamento alla 5.3.8, testualmente:

All PHP users should note that the PHP 5.2 series is NOT supported anymore. All users are strongly encouraged to upgrade to PHP 5.3.8.

E pensare che qualcuno vuole ancora usare PHP 4 :-)

enjoy!

Riconoscere lato server se la navigazione avviene da iPad

Potrebbe essere comodo capire se la navigazione nel proprio sito avviene da iPad, magari per mostrare una pagine web formattata in modo differente.
Questa verifica può essere fatta lato client in JavaScript, oppure lato server in PHP o direttamente tramite rewrite del server web (apache in questo caso).
Il concetto è sempre lo stesso: riconoscere il browser del visitatore dall’UserAgent.

In JavaScript è possibile usare il seguente codice:

var isiPad = navigator.userAgent.match(/iPad/i) != null;
var ua = navigator.userAgent;
var isiPad = /iPad/i.test(ua) || /iPhone OS/i.test(ua);

In PHP è possibile usare il seguente codice:

$isiPad = (bool) strpos($_SERVER['HTTP_USER_AGENT'],'iPad');

Infine con le regole di rewrite da inserire in un file .htaccess, si può usare il seguente codice per attivare il redirect verso un altro indirizzo nel caso il visitatore usi un iPad:

RewriteCond %{HTTP_USER_AGENT} ^.*iPad.*$
RewriteRule ^(.*)$ http://ipad.domain.ext [R=301]

PHP 5.3 e $_REQUEST['PHPSESSID'] vuoto

Usando PHP 5.3, avrete notato che $_REQUEST['PHPSESSID'] è vuoto.
A differenza delle precedenti versioni di PHP, per ragioni di sicurezza, $_COOKIE non viene importato in $_REQUEST e quindi non è disponibile il PHPSESSID.

Per ovviare, si può associare il contenuto di $_COOKIE['PHPSESSID'] a $_REQUEST['PHPSESSID'] nel caso sia vuoto, inserendo dopo il “session_start()”:

$_REQUEST['PHPSESSID'] = (!isset($_REQUEST['PHPSESSID']))?$_COOKIE['PHPSESSID']:$_REQUEST['PHPSESSID'];

In alternativa si può modificare il funzionamento di PHP, editando il file di configurazione /etc/php5/apache2/php.ini ed in particolare la nuova direttiva request_order

enjoy!

Installare bcompiler per PHP su Debian

bcompiler è un modulo per PHP della raccolta PECL (Php Extension Community Library) che permette la codifica di script PHP. E’ molto utile se non si vuole rendere pubblico il codice di uno script. Purtroppo è possibile compilare solo singole classi e librerie di funzioni e non file con istruzioni singole.

Per installare la libreria di PHP su Debian si procede come segue:

apt-get install libbz2-dev php-pear php5-dev make
pecl install channel://pecl.php.net/bcompiler-0.9.3

Creare infine un file chiamato /etc/php5/conf.d/bcompiler.ini con il seguente contenuto:

extension=bcompiler.so

e riavviare apache:

/etc/init.d/apache2 restart

Per verificare se la libreria è attiva, si può controllare il classico “phpinfo()”, oppure lanciare, da shell:

php -i |grep bcompiler

Effettuare il debug di uno script PHP con vim su debian Lenny

Volevo scrivere una breve guida alla configurazione di vim per l’uso come client per il debug di un’applicazione PHP. Con Lenny la procedura è semplificata, perché troviamo già qualche pacchetto precompilato ;-)

Dunque, gli strumenti che useremo sono: xdebug, vim, DBGp client.
L’installazione di vim standard su Lenny non è sufficiente per l’uso dei plugin (nel nostro caso DBGp client) e quindi dovremo installare il pacchetto vim-nox:

apt-get install vim-nox

successivamente ci sposteremo nella cartella /usr/share/vim/vim72/ (se vogliamo che il plugin sia attivo per tutti gli utenti di sistema) oppure nella cartella ~/.vim/plugin (se vogliamo attivare il plugin solo per un utente) e scaricheremo il plugin DBGp client e lo installeremo:

cd /usr/share/vim/vim72/

wget http://www.vim.org/scripts/download_script.php?src_id=7285 -O debugger.zip
unzip debugger.zip

Fatto questo, occorre installare/configurare xdebug su PHP. Provvediamo ad installarlo con:

apt-get install php5-xdebug

e poi a configurarlo, modificado il file di configurazione /etc/php5/conf.d/xdebug.ini inserendo:

xdebug.remote_enable = 1
xdebug.remote_port = 9000
xdebug.remote_host = localhost

riavviamo poi chiaramente apache con:

/etc/init.d/apache2 restart

Ora, per attivare xdebug, dovremo richiamare con il browser il nostro sito, seguito da /?XDEBUG_SESSION_START=1 (es www.pippo.xxx/?XDEBUG_SESSION_START=1). In questo modo verrà caricato un cookie nel browser (con scadenza di un’ora) che automaticamente attiverà xdebug per le prossime pagine che richiameremo.

Bene, siamo pronti. ora lanciamo vim senza nessun file, digitando:

vim

premiamo il tasto funzione F5 ed entro 5 secondi richiamiamo con il browser la pagina PHP di cui vogliamo fare il debug.

Nota: se si vuole aumentare il tempo entro cui si può richiamare la pagina (che di default è 5), basta aprire il file /usr/share/vim/vim72/plugin/debugger.py e sostituire 5 con il numero di secondi desiderati nelle chiamate: socket.setdefaulttimeout(5) e serv.listen(5)

Alcune informazioni utili:
In modalità debugging, i tasti servono a:
<F1> : ridimensiona le finestre
<F2> : step into
<F3> : step over
<F4> : step out

<F6> : stop debugging

<F11> : mostra tutte le variabili
<F12> : mostra il contenuto della variabile su cui si trova il cursore

,e : valuta un’espressione e mostra il risultato. il cursore viene automaticamente spostato nella watch window. scrivi l’espressione e premi il tasto “invio”.

comandi command line
:Bp : toggle breakpoint on current line
:Up : goto upper level of stack
:D n : goto lower level of stack

Per impostare un breakpoint:
Attivare il debugger in vim (tasto <F5>) e poi aprire il file in cui ci interessa inserire il brekpoint con:

:e nomefile

scorrere fino alla riga desiderata e digitare:

:Bp

Premere poi <F4> per avviare lo script finché non viene raggiunto il breckpoint.

enjoy

Date php in italiano con Debian

Il titolo è un po’ criptico, ma ora cerco di spiegarmi meglio.

Con PHP è possibile utilizzare la funzione per visualizzare le informazioni sulle date (es nome del mese o nome del giorno) nella lingua corrente. Ad esempio uno script potrebbe essere:

setlocale(LC_TIME, 'it_IT');
echo strftime("%d %B %Y");

Se però PHP è installato su un SO il cui “locale” non è configurato con it_IT, le date continueranno ad essere visualizzate in inglese.

Per istruire la vostra Debian che la lingua dovrà essere it_IT, basterà digitare da console:

dpkg-reconfigure locales

e poi dall’elenco visualizzato, scegliere:

it_IT ISO-8859-1
it_IT.UTF-8 UTF-8

successivamente indicare che la lingua predefinita di sistema dovrà essere:

it_IT

ed attendere che dpkg completi la configurazione.

enjoy

Page optimized by WP Minify WordPress Plugin