PrestaShop è un CMS gratuito e open-source, completo e in grado di realizzare un'ottima soluzione e-commerce con un investimento minimo. Abbiamo già visto la procedura di installazione di PrestaShop,e anche discusso quali sono i vantaggi nel realizzare un'attività e-commerce utilizzando un CMS.

L'installazione di PrestaShop è veloce e semplice finché siamo in locale. Le cose cambiano quando lavoriamo in hosting: è normale che il server remoto non sia configurabile a nostro piacimento, e può succedere che la stessa identica installazione, portata in remoto via FTP, non funzioni come dovrebbe sul server che usiamo come remoto. Oggi vedremo come risolvere alcuni problemi di configurazione di PrestaShop in uno scenario realistico (deploy su un server remoto).

Memory Limit

Una situazione frequente, dopo aver portato un'istanza di PrestaShop in remoto, è di non riuscire a caricare alcune pagine del backend. Il caso tipico riguarda la pagina dei moduli, che potrebbe non aprirsi, bloccarsi o restare visualizzata per metà. Nella maggior parte dei casi la causa è il valore memory_limit di PHP. Se andiamo a vedere in locale, curiosando tra i files della nostra installazione del pacchetto AMP (o equivalente), troveremo il file php.ini.

All'interno di questo file dovrebbe trovarsi una riga come questa

memory_limit = 128M

che indica qual è la massima memoria (RAM) utilizzabile dagli script PHP. Questo valore dovrebbe coincidere con quello che viene stampato nella sezione core del comando

<?php phpinfo() ; ?>

Se in locale è normale avere il memory limit settato a 128M, in remoto non vale la stessa cosa. Il valore di default, per molti host provider, si aggira sui 32M. Questo per evitare che alcuni utenti, senza valido motivo, facciano girare pagine molto “pesanti” mandando in stallo il server. Nel caso di PrestaShop (e molti altri programmi) il valore 32M è troppo basso, e per questo motivo potremmo non riuscire a caricare tutte le pagine del backend.

Alcune soluzioni potrebbero essere:

  1. Contattiamo il provider e chiediamo di alzare il memory limit a 128M. In molti casi basta aprire un ticket e l'operazione dovrebbe essere gratuita e indolore. La situazione però dipende da chi è il nostro provider. Alcuni providers, soprattutto quelli economici o gratuiti, non offrono un'assistenza di questo tipo. Altri potrebbero impiegare giorni a rispondere. Altri ancora potrebbero dirci che non è possibile, e che l'unico modo di modificare un parametro PHP è cambiando abbonamento, cioè pagando di più
  2. Proviamo a caricare un file .htaccess nella root di PrestaShop (chiaramente remoto). Questa è forse la soluzione migliore, ma non sempre funziona. Anche in questo caso tutto dipende dal provider. Se Apache è configurato per non permettere l'override della configurazione, il nostro .htaccess verrà ignorato e quindi rientriamo nel caso precedente

Lo scenario migliore è quello che permette il deploy del file .htaccess: se questo non funziona, o se non sappiamo come fare, allora dobbiamo rivolgerci al nostro provider.

Il file .htaccess

Abbiamo già introdotto la funzione del file .htaccess qui, e abbiamo anche visto, discutendo la struttura del file httpd.conf, che molte delle direttive inseribili nel file httpd.conf possono essere inserite anche nel file .htaccess, utilizzando esattamente la stessa sintassi.

Per la configurazione dei parametri di PHP la situazione è leggermente diversa. Il file .htaccess serve principalmente a personalizzare la configurazione di Apache, mentre PHP è di solito presente come modulo di Apache. Si potrebbe pensare che non c'è modo di modificare la configurazione di PHP tramite il file .htaccess. Per nostra fortuna gli sviluppatori di Apache hanno pensato a tutto, e nel file .htaccess possiamo inserire una direttiva del tipo

php_value memory_limit 128M

facciamo attenzione agli spazi tra la varie parole: la direttiva php_value dice ad Apache che stiamo configurando un valore del modulo PHP (invece che la configurazione di Apache). La direttiva memory_limit specifica quale parametro di PHP vogliamo modificare. Alla fine troviamo il valore 128M, ovvero il valore da assegnare al parametro memory_limit.

In altre parole la direttiva qui sopra (da inserire nel file .htaccess) ha lo stesso effetto della direttiva

memory_limit = 128M

che si trova invece nel file php.ini. Non facciamoci confondere dalla sintassi diversa, non c'è niente di sbagliato. La prima istruzione dice ad Apache di fare da “passaparola” per assegnare un parametro a PHP, mentre nel secondo caso stiamo mettendo direttamente le mani nella configurazione di PHP: è quindi giusto che le due istruzioni abbiano una diversa sintassi, poiché sono usate in contesti differenti.

Conclusione

Il deploy del file .htaccess nella root del PrestaShop remoto dovrebbe risolvere problemi come quello discusso all'inizio dell'articolo. Anche se non utilizziamo PrestaShop, quanto detto potrebbe servire per risolvere problemi simili con altre applicazioni o CMS realizzati in PHP su Apache. Al di là di quale sia il problema, o la soluzione, ricordiamoci sempre del comando phpinfo(), che in molti casi è il primo strumento di indagine che abbiamo a disposizione.