GNU/Linux >> Belajar Linux >  >> Linux

file_put_contents tidak membuat file txt

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

Linux
  1. File Cat Dengan Direktori?

  2. Perbedaan Perhitungan Ukuran Direktori?

  3. Tulis Semua Tmux Scrollback Ke File?

  1. Kesalahan:Tcl.h Tidak Ditemukan (tidak ada File Atau Direktori Tersebut)?

  2. file:perintah tidak ditemukan

  3. Inti dibuang, tetapi file inti tidak ada di direktori saat ini?

  1. Mengecualikan direktori saat membuat file .tar.gz

  2. Tulis ke file .txt?

  3. Mengapa tautan simbolis saya membuat file dan bukan folder?