Saya mengalami masalah yang sama baru-baru ini dan menemukan pertanyaan ini. Sayangnya choppyfireballs OP mengatakan dalam komentar dia menemukan solusinya sendiri dan baru saja menerima jawaban yang tidak membantu salah satu dari kami ... Kemudian setelah pencarian dan berhasil membuat file_put_contents bekerja lagi saya memutuskan untuk membagikan solusi saya.
Izin file dan direktori saya boleh menerima tulisan apa pun (pastikan direktori Anda chmod 757
ini akan memberikan root dan lainnya hibah untuk menulis file di lokasi). Jika masih tidak berfungsi seperti saya, itu karena sistem Anda mungkin SELinux (Linux yang Ditingkatkan Keamanan).
Jika Anda ingin memastikan, tulis setenforce 0
ini akan mengubah selinux ke mode permisif, jalankan skrip Anda lagi, jika berhasil berarti masalahnya dijelaskan dengan baik.
Dalam hal ini, aktifkan selinux kembali setenforce 1
dan coba ls -Zl
di direktori tempat direktori proyek Anda berada. ini akan memberi Anda garis seperti
drwx---r-x. 9 root root system_u:object_r:httpd_sys_content_t:s0 4096 Dec 8 00:25 project
atau sesuatu yang berbeda selain httpd_sys_content_t
jika Anda menggunakan chcon
untuk mentransfer konteks dari satu direktori ke direktori ini. tetapi jika Anda tidak memiliki httpd_sys_content_t
tidak apa-apa karena kita perlu mengubah konteks direktori itu.
pertama, Anda harus menerima public_content_rw_t
apa pun konteks untuk menulis file. Ketik
setsebool -P httpd_anon_write on
Ini akan mengatur (P) SELinux secara permanen boolean httpd_anon_write
ke true dan konteks apa pun dijuluki sebagai public_content_rw_t
akan memiliki hak untuk menulis file apa pun di lokasinya sendiri.
Sekarang Anda harus mengatakan SELinux bahwa direktori proyek Anda adalah public_content_rw_t
atau Anda masih tidak dapat menulis file. Ketik :
semanage fcontext --add --type public_content_rw_t "/project(/.*)?"
dan restorecon -RvF /project
untuk memberi tahu selinux untuk menerapkan spesifikasi di atas.
Sekarang direktori Anda adalah public_content_rw_t dan Anda harus dapat menulis file.
Masalah Anda mungkin karena apache tidak memiliki izin untuk menulis ke lokasi file yang Anda tentukan. Buka direktori tersebut dan periksa izin dan kepemilikan grup dengan ls
perintah:
cd "My working file location"
ls -l .
Ada tiga kolom di output yang menunjukkan izin, pemilik, dan grup untuk direktori tersebut. Kemungkinan besar mereka dimiliki oleh root dan tidak memiliki izin untuk apache
untuk menulis ke direktori.
Jika demikian, maka Anda akan melihat kesalahan muncul di log apache Anda saat mencoba membuat file. Cobalah membuntuti log Anda saat menjalankan skrip di browser Anda:
tail -f /var/log/apache2/error.log