Saya mencoba menulis kueri ke file untuk debugging. File dalam format database/execute.php
. File yang ingin saya tulis adalah database/queries.php
.
Saya mencoba menggunakan file_put_contents('queries.txt', $query)
Tapi saya mendapatkan
file_put_contents (queries.txt) [function.file-put-content]: gagal membuka aliran: Izin ditolak
Saya memiliki queries.txt
file chmod'd ke 777, apa masalahnya?
php
file-io
file-permissions
Hailwood
sumber
sumber
php.ini
file untuk mencari sesuatu yang mungkin menolak akses file?Jawaban:
Coba sesuaikan izin direktori.
dari terminal, jalankan
chmod 777 database
(dari direktori yang berisi folder database)apache dan tak seorang pun akan memiliki akses ke direktori ini jika di-chmodd dengan benar.
Hal lain yang harus dilakukan adalah echo "getcwd ()". Ini akan menunjukkan direktori saat ini, dan jika ini bukan '/something.../database/' maka Anda harus mengubah 'query.txt' ke jalur lengkap untuk server Anda.
sumber
chmod +x /parent/directory
, untuk setiap direktori induk dari target.chmod +x /parent/directory
,,chmod +x /parent
dll.Pilihan lainnya
adalah yang dapat Anda jadikan
Apache (www-data)
sebagai pemilik folderyang seharusnya
file_put_contents
berhasil sekarang. Tetapi untuk keamanan lebih baik Anda juga mengatur izin seperti di bawah ini/var/www
ke folder root dari file php Andasumber
Sadarilah bahwa ini sudah cukup lama sekarang, tetapi tidak perlu menulis kueri secara manual ke file seperti ini. MySQL memiliki dukungan logging bawaan, Anda hanya perlu mengaktifkannya dalam lingkungan dev Anda.
Lihat dokumentasi untuk 'log kueri umum':
http://dev.mysql.com/doc/refman/5.1/en/query-log.html
sumber
Teman-teman Saya mengalami masalah ini selama 1 bulan dan melakukan semuanya tetapi tidak dapat memperbaikinya, tetapi sekarang saya tahu solusinya.
Saya menggunakan shared hosting linux, ketika admin saya mengubah php menjadi 5.3 saya mendapat banyak error untuk kode "file_put_contents". coba uji rencanaku:
Di host Anda, buat file seperti mytest.php, dan masukkan kode ini dan simpan:
Buka URL "www.your-domain.com/mytest.php" satu kali dan kemudian periksa email Anda. Anda harus memiliki email dari host Anda dengan informasi yang Anda masukkan di mytest.php, periksa nama pengirimnya. jika itu dari Tidak Ada Anda memiliki masalah tentang "Izin Ditolak" karena sesuatu tidak ditentukan dan jika nama pengirim seperti id saya: [email protected] Anda tidak punya masalah.
Admin saya mengubah server dan menginstal host lagi, saya pikir dan masalahnya teratasi, beri tahu administrasi host Anda apa yang saya katakan dan mungkin mereka menemukan jawabannya.
semoga membantu Anda!
sumber
Saya tahu bahwa ini adalah pertanyaan yang sangat lama, tetapi saya ingin menambahkan solusi yang baik dengan penjelasan yang mendalam. Anda harus menjalankan dua pernyataan pada sistem seperti Ubuntu dan kemudian berfungsi seperti pesona.
Izin di Linux dapat direpresentasikan dengan tiga digit. Digit pertama menunjukkan izin dari pemilik file. Digit kedua izin dari grup pengguna tertentu. Digit ketiga mendefinisikan izin untuk semua pengguna yang bukan pemilik maupun anggota grup.
Server web seharusnya dijalankan dengan id yang merupakan anggota grup. Server web tidak boleh berjalan dengan id yang sama dengan pemilik file dan direktori. Di Ubuntu menjalankan apache di bawah id www-data. Id itu harus menjadi anggota grup yang izinnya ditentukan.
Untuk memberi direktori tempat Anda ingin mengubah konten file hak yang tepat, jalankan pernyataan:
Itu akan menyiratkan dalam pertanyaan OP bahwa izin untuk direktori% ROOT% / database harus diubah sesuai. Oleh karena itu, penting untuk tidak memiliki file dalam direktori itu yang tidak boleh diubah, atau dihapus. Oleh karena itu, praktik terbaik adalah membuat direktori terpisah untuk file yang isinya harus diubah.
Izin membaca (4) untuk direktori berarti dapat mengumpulkan semua file dan direktori dengan metadatanya di dalam direktori. Izin menulis (2) memberikan izin untuk mengubah konten direktori. Menyiratkan menambah dan menghapus file, mengubah izin, dll. Izin eksekusi (1) berarti Anda berhak masuk ke direktori itu. Tanpa yang terakhir ini tidak mungkin untuk masuk lebih dalam ke direktori. Server web membutuhkan izin baca, tulis, dan eksekusi ketika konten file harus diubah. Untuk itu perlu kelompok angka 7.
Pernyataan kedua adalah dalam pertanyaan OP:
Mampu membaca dan menulis dokumen diperlukan, tetapi tidak diharuskan untuk menjalankan file. 7 diberikan kepada pemilik file, 6 untuk grup. Server web tidak perlu memiliki izin untuk mengeksekusi file untuk mengubah isinya. Izin menulis tersebut hanya boleh diberikan ke file di direktori itu.
Semua pengguna lain tidak boleh diberi izin apa pun.
Untuk direktori yang tidak perlu mengubah file-nya adalah izin grup 5 yang cukup. Dokumentasi tentang perizinan dan beberapa contoh:
https://wiki.debian.org/Permissions
https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions
http://www.linux.org/threads/file-permissions-chmod.4094/
sumber
Mengumpulkan info dari tautan ini penyimpanan gambar stackoverflow tidak berfungsi dengan chmod 777 dan dari pengguna azerafati dan Loek Bergman
jika Anda melihat di bawah file / etc / apache / envvars Anda akan melihat sesuatu seperti:
Apache dijalankan dengan nama pengguna 'www-data'
'0755' berarti pemilik file dapat membaca / menulis / mengeksekusi tetapi grup dan pengguna lain tidak dapat menulis. jadi di terminal Anda, cd ke folder yang berisi folder 'gambar' Anda. lalu ketik:
Anda harus mengubah persepsi terlebih dahulu sebelum mengganti pemilik. masukkan kata sandi Anda saat diminta. ini akan menjadikan 'www-data' sebagai pemilik folder gambar.
unggahan Anda sekarang harus berfungsi.
sumber
Untuk siapa saja yang menggunakan Ubuntu dan menerima kesalahan ini saat memuat halaman secara lokal, tetapi tidak pada layanan hosting web,
Saya baru saja memperbaikinya dengan membuka nautilus (
sudo nautilus
) dan klik kanan pada file yang Anda coba buka, klik properti> Pengaturan> dan berikan baca tulis ke 'semua orang'sumber
memiliki masalah yang sama; masalah saya adalah selinux diatur untuk menegakkan.
Saya terus mendapatkan kesalahan "gagal membuka aliran: Izin ditolak" bahkan setelah chmoding ke 777 dan memastikan semua folder induk telah menjalankan izin untuk pengguna apache. Ternyata masalah saya adalah bahwa selinux diatur untuk diberlakukan (saya menggunakan centos7), ini adalah kotak dev jadi saya mematikannya.
sumber
Ini dapat diatasi dengan langkah-langkah berikut:
Semoga membantu
sumber
Jika Anda menarik dari git dari lokal ke server, Anda terkadang perlu menghapus cache karena file tampilan yang diunggah dengannya / atau file cache lainnya.
Terkadang itu mungkin hanya untuk trik jika aplikasi Anda berfungsi sebelum git pull
sumber
ini mungkin bisa membantu. Itu berhasil untuk saya. coba di terminal
setenforce 0
sumber
Ada 2 cara untuk mengatasi masalah ini
1. gunakan
chmod 777 path-to-your-directory
.jika tidak berhasil maka
cukup berikan path lengkap dari file Anda
query.txt
.sumber
Berikut solusinya. Untuk menyalin sebuah img dari URL. URL ini:
http://url/img.jpg
buat jalur yang diinginkan, selesaikan nama dengan
.jpg
sumber
Selanjutnya, seperti yang dikatakan
file_put_contents man page
diphp.net
, berhati-hatilah terhadap masalah penamaan.mungkin tidak berfungsi (meskipun sintaksnya benar), tetapi
bekerja. Saya mengalami ini di server yang diinstal php berbeda.
sumber
$dir."/file.txt"
secara fungsional setara dengan"$dir/file.txt"
dalam semua kasus, dengan asumsi$dir
adalah string. Lebih lanjut, perilaku ini tidak didokumentasikan di php.net, seperti klaim Kivanc.