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!