IMCE: Il file nomefile.ext non può essere salvato. Si è verificato un errore sconosciuto. Il caricamento è fallito.

Argomenti: 

Utilizzando IMCE come file manager in congiunzione con CKEditor mi è capitato su alcune installazioni di ricevere un errore del genere:

Il file nomefile.ext non può essere salvato. Si è verificato un errore sconosciuto.
Il caricamento è fallito.

In sè il messaggio non dà molte informazioni. La prima cosa a cui ho pensato è un problema di permessi/ownership delle cartelle del filesystem.

Da un controllo però non è emerso alcun problema: i permessi sono in ordine, la cartella temporanea esistente e scrivibile.

Dai log del web server (le installazioni in questione utilizzano NGINX con PHP FPM) ho rilevato queste voci:

"File upload error - unable to create a temporary file in Unknown on line 0" while reading response header from upstream

FastCGI sent in stderr: "PHP message: PHP Warning:  Unknown: open_basedir restriction in effect. File(/tmp) is not within the allowed path(s): ...

Nella configurazione del pool di php-fpm in effetti ho la linea:

php_admin_value[open_basedir] = /home/var/www/....../web:/var/www/nginx

che restringe di fatto l'accesso ai file da PHP entro tali directory.

Il filesystem di Drupal per la directory temporanea è impostato correttamente a:

sites/default/files/tmp

che è all'interno dei path ammessi da open_basedir ma IMCE ignora completamente questa direttiva utilizzando per i propri file temporanei la directory di default impostata su php.ini.

La soluzione quindi è stata inserire nella configurazione del pool la direttiva:

php_admin_value[upload_tmp_dir] = /home/var/www/.../web/sites/default/files/tmp

nel caso avessi voluto dare un'impostazione globale avrei dovuto o modificare il file php.ini inserendo la direttiva

upload_tmp_dir = [nuova cartella temporanea con accesso in scrittura]

oppure modificare i permessi per la cartella di default che è impostata come /tmp.

Spero che questo post faccia risparmiare tempo a qualcuno che ha avuto il mio stesso problema!