Ho avuto lo stesso problema di recente e mi sono imbattuto in questa domanda. Sfortunatamente choppyfireballs l'OP ha detto in un commento che ha trovato la sua soluzione e ha appena accettato una risposta che non stava aiutando nessuno di noi ... Quindi, dopo una ricerca e un successo, creare file_put_contents funziona di nuovo ho deciso di condividere la mia soluzione.
I permessi dei miei file e directory erano ok per accettare qualsiasi scrittura (assicurati che le tue directory siano chmod 757
questo darà la radice e altri la concessione per scrivere i file nella posizione). Se ancora non funziona come non ha funzionato per me, è perché il tuo sistema è probabilmente SELinux (Security Enhanced Linux).
Se vuoi essere sicuro scrivi setenforce 0
questo trasformerà selinux in modalità permissiva, esegui di nuovo lo script, se funziona significa che il problema è ben descritto.
In tal caso attiva selinux sul retro setenforce 1
e prova ls -Zl
nella directory in cui si trova la directory del tuo progetto. questo ti darà una linea come
drwx---r-x. 9 root root system_u:object_r:httpd_sys_content_t:s0 4096 Dec 8 00:25 project
o qualcosa di diverso ma httpd_sys_content_t
se hai usato chcon
per trasferire il contesto da una directory a questa. ma se non hai httpd_sys_content_t
va bene perché dobbiamo comunque cambiare il contesto di quella directory.
prima devi accettare qualsiasi public_content_rw_t
contesti per scrivere file. Digita
setsebool -P httpd_anon_write on
Questo imposterà (P)ermanentemente SELinux boolean httpd_anon_write
a true e qualsiasi contesto denominato public_content_rw_t
avrà i diritti per scrivere qualsiasi file nella propria posizione.
Ora devi dire a SELinux che la directory del tuo progetto è public_content_rw_t
o non sarai ancora in grado di scrivere file. Digita :
semanage fcontext --add --type public_content_rw_t "/project(/.*)?"
e restorecon -RvF /project
per dire a selinux per applicare le specifiche di cui sopra.
Ora la tua directory è public_content_rw_t e dovresti essere in grado di scrivere file.
Il tuo problema è probabilmente dovuto al fatto che Apache non dispone delle autorizzazioni per scrivere nella posizione del file che hai specificato. Vai in quella directory e controlla i permessi e la proprietà del gruppo con ls
comando:
cd "My working file location"
ls -l .
Nell'output sono presenti tre colonne che mostrano le autorizzazioni, il proprietario e il gruppo per la directory. Molto probabilmente sono di proprietà di root e non hanno i permessi per apache
per scrivere nella directory.
In tal caso, verrà visualizzato un errore nel registro di Apache quando tenta di creare il file. Prova a seguire i tuoi log durante l'esecuzione dello script nel tuo browser:
tail -f /var/log/apache2/error.log