Dreamhost, W3C Validator e PHPSESSID

Da qualche giorno mi sto prodigando per trasferire tutto il mio sito da Tophost a Dreamhost dove da poco ho acquistato un piano di hosting annuale Crazy Domain Insane! e dove ho registrato un nuovo dominio www.davidesalerno.net che presto diverrà anche il mio unico dominio (adesso vedrò un pò se varrà o meno la pena mantenere un redirect per www.davidesalerno.it verso il nuovo dominio).

Non c’è ombra di dubbio sul fatto che Dreamhost ed i servizi che offre siano il top sul mercato del web hosting attualmente. E solo quando la si incomincia ad usare si può realmente capire perchè con tale mantainer si può realmente sognare… sognare di volare, di viaggiare con la mente verso mete lontane, sognare un web 2.0 a portata di ciascuno di noi… sognare ciò che più ci va insomma.

E’ altrettanto vero però che la fase più “triste” di questa migrazione è sicuramente il trasloco del CMS da un server all’altro soprattutto se si considera anche il cambiamento di dominio. Io uso WordPress per gestire tutto quanto e devo dire che di guide, tutorial, discussioni su forum vari se ne trovano a bizzeffe ed è forse questo il motivo per cui ho scelto tale content manager system per il mio sito personale e lo consiglio a chiunque si voglia cimentare in tali “imprese”. Tornando al trasloco, in tale fase bisogna stare attenti ad esportare correttamente il database in mysql per evitare di perdere tabelle o di esportarne di superflue e per non perdere i caratteri accentati tipici della nostra beneamata lingua italiana.

Dopo essermi cimentato senza trovare non poche difficoltà in questo trasferimento ed aver ricostruito tutto alla perfezione sul mio nuovo spazio web… quando tutto mi sembrava a posto e funzionante (almeno all’apparenza) ecco che sorge il problema rognoso: andando a validare le pagine del “nuovo” sito compaiono 127 errori dovuti al fatto che ad alcuni link viene aggiunto in coda un suffisso per tenere traccia dell’ID della sessione PHP. Più precisamente veniva aggiunto &PHPSESSID=xxxxxxx dove xxxxxx è l’ID della sessione PHP che si sta usando. Qual’è il problema? Semplice anzi semplicissimo: nello standard W3C non sono ammesse & negli indirizzi.

Siccome sul vecchio sito installato su Tophost tale problema non sussisteva, dopo varie ricerche ho scoperto che tale suffisso è aggiunto automaticamente dai server di Dreamhost perchè l’installazione di default su tali macchine è fatta con alcuni parametri del file php.ini tale da effettuare tale aggiunta quando il browser che richiede le pagine non supporta i cookie. D’altro canto Dreamhost adotta una strategia particolare per installare PHP sulle proprie macchine, che consiste nel far girare PHP come un’applicazione CGI. Questo ha i suoi vantaggi ma anche i suoi svantaggi: è molto flessibile perchè ogni utente può ricompilarsi il modulo PHP a proprio piacimento in modo da soddisfare le proprie esigenze più recondite, però richiede una conoscenza sistemistica un pò avanzata che potrebbe scoraggiare gli utenti alle prime armi. Per questo motivo chiunque lo desiderasse può utilizzare l’installazione classica del modulo di PHP che però ha delle restrizioni in quanto si è obbligati ad usare le impostazioni condivise per tale modulo “imposte” in fase di installazione da Dreamhost.

Ora il problema principale da affrontare era il seguente: passare all’installazione di base sperando che il problema scomparisse per le impostazioni del file php.ini diverse o ricompilare PHP con le nuove impostazioni settate? Cercando, cercando e spremendo bene le meningi per far riaffiorare alla mente le mie conoscenze sistemistiche un’altra soluzione meno “invasiva” c’è. Consiste nel collegarsi via SSH al server di Dreamhost sul quale c’è il nostri sito, creare una cartella, copiarci dentro i file che attualmente si stanno usando per il PHP ed avviarli “in locale” con delle impostazioni del file php.ini modificate per risolvere il nostro problema.

Ecco le operazioni da fare passo passo avendo cura di abilitare un utente all’accesso via shell allo spazio web, operazione da fare dal pannello di controllo. Io ho fatto tutto utilizzando un Mac che ha già integrato nel sistema operativo i client OpenSSH fruibile da terminale digitanto il comando ssh seguito dai parametri necessari, per gli utenti Windows consiglio l’utilizzo di PuTTY oppure se si vuole qualcosa di più “purista” l’installazione di CygWin con il pacchetto OpenSSH.

> ssh nomeutente@tuodominio.com
> Password: ******* (inserire la propria password)
> mkdir ~/domain.com/cgi-bin/
> pico -w php_update (per generare un nuovo file di testo che contiene quanto sotto)

#/bin/sh

CGIFILE=”$HOME/domain.com/cgi-bin/php.cgi”
INIFILE=”$HOME/domain.com/cgi-bin/php.ini”

cp /usr/local/bin/php “$CGIFILE”
cp /etc/php/php.ini “$INIFILE”

perl -p -i -e ‘
s/.*session\.use_only_coockies.*/session\.use_only_coockies = 1/;
s/.*session\.use_trans_sid.*/session\.use_trans_sid = 0/;
‘ “$INIFILE”

> chmod +x php_update
>./php_update

A questo punto se non vengono segnalati errori è tutto andato a buon fine e non resta che fare le seguenti operazioni:

>crontab -e

e inserire la seguente linea nell’editor di testo che si aprirà:

@weekly /home/myusername/php_update

Questo farà aggiornare i binari ed i file di configurazione del PHP una volta a settimana. Ora bisogna fare un ultima modifica andando ad aggiungere le seguenti linee nel file .htaccess contenuto nella cartella radice del vostro dominio:

AddHandler php-cgi .php
Action php-cgi /cgi-bin/php.cgi

E come per magia le vostre pagine rispetteranno lo standard W3C!!!

Articolo interessante?

Rimani sempre aggiornato abbonandoti ai feed RSS di questo sito oppure riicevi comodamente gli aggiornamenti via e-mail.

Commenti

  1. dice

    Ciao Davide,

    tu scrivi: «bisogna stare attenti ad esportare correttamente il database in mysql per evitare di […] non perdere i caratteri accentati tipici della nostra beneamata lingua italiana.»
    Io ho seguito la tua stessa strada (trasferimento da Aruba a DreamHost, mantenendo lo stesso nome a dominio), ma purtroppo proprio due minuti fa, ripristinando il database mysql, mi sono trovato di fronte alla brutta sorpresa di trovare tutte le lettere accentate sostituite da orribili punti interrogativi; il che, capirai, è un trauma non da poco, essendo la loro diffusione ampia nelle centinaia di articoli presenti sul mio sito.
    Considerando che, per fortuna, ho ancora il vecchio database MySQL su cui, se del caso, effettuare un backup a norma e tosca, potresti cortesemente darmi una mano?

    Grazie fin d’ora!

  2. dice

    Io l’ho fatto ma non ne voleva sapere di funzionare. Forse non siamo sullo stesso server e le impostazioni differiscono per qualche dettaglio.
    Oppure hanno cambiato di recente le impostazioni delle modifiche effettuabili da .htaccess, perchè a me non funzionava assolutamente.

    Comunque io consiglio di passare al php sotto cgi perchè è molto più versatile: io per esempio avendo 200 GB su Dreamhost ho preferito installarmi Gallery2 per gestire la mia galleria fotografica piuttosto che affidarmi a Flickr e siccome Gallery è esoso di risorse (php_memory_limit, max_upload_file_size, ecc ecc) per gestire tutto al meglio conviene passare a php sotto cgi come consigliato anche da Dreamhost.

  3. Pinolo dice

    Ciao Davide, sono appena passato a Dreamhost e ho avuto lo stesso problema. Per risolverlo non occorre fare questa procedura, sicuramente intelligente, ma un po’ macchinosa e un po’ soggetta ad instabilità; basta inserire un file .htaccess nella cartella dove sta il sito con il comando:
    php_flag session.use_trans_sid False

Trackbacks

  1. […] Si estáis alojados en Dreamhost y estáis desarrollando una web con sesiones PHP os encontraréis con el problema de que al final de cada dirección URL, añade algo del tipo ?PHPSESSID=un_número_to_largo. Esto es bastante antiestético, además no es válido según el W3C. Para arreglaro, el italiano David Salerno nos propone una solución ingeniosa para evitar que compilar PHP nosotros mismos. Lo traduzco directamente de su blog: […]