Apache/PHP e pagine bloccano la navigazione

Come capita a volte, il titolo ha bisogno di una spiegazione.

Parliamo di un server web con la classica configurazione Apache (mpm_event) e PHP (FPM). Capita che avviando operazioni lunghe da una pagina (ad esempio la cancellazione di più file da un file manager), la navigazione su altre pagine dello stesso sito aperte su un’altra finestra sia bloccata, finché la cancellazione non viene conclusa.

Da cosa dipende? Dipende da come viene gestita la sessione da PHP o meglio dal fatto che PHP attiva un lock sul file di sessione e con il file bloccato le successive richieste vengono messe in coda, finché il file non torna disponibile.

La soluzione? In realtà le soluzioni sono più di una e bisogna scegliere quella che meglio si addice alle proprie esigenze.

Innanzittuto c’è quella di usare l’istruzione:

nello script PHP quando non è più necessario accedere in scrittura alla sessione. In questo modo i dati in sessione restano comunque disponibili nello script ma non sarà possibile scrivere ancora.

In alternativa si più usare un altro motore per la gestione delle sessioni, tipo memcached, redis, etc.

Ad esempio, per memcached, basta seguire questa procedura.

Installare memcached:

eventualmente modificare le opzioni nel file /etc/memcached.conf e poi avviare il servizio:

Poi modificare il file php.ini (es per la versione 7.2 si trova in /etc/php/7.2/fpm/php.ini) e sostituire:

con

Infine riavviare php:

enjoy!

Se hai trovato utili le informazioni su questo blog,
Fai una donazione!
Clicca sul bottone qui sotto o almeno clicca sul banner pubblicitario 🙂



Commenta