Saya mencoba untuk membuat direktori dengan fungsi mkdir PHP tapi saya mendapatkan error sebagai berikut: Warning: mkdir() [function.mkdir]: Permission denied in .... Bagaimana cara menyelesaikan masalah?
Saya tahu ini adalah utas lama, tetapi perlu jawaban yang lebih baik. Anda tidak perlu menyetel izin ke 777, yang merupakan masalah keamanan karena ini memberikan akses baca dan tulis ke dunia. Mungkin pengguna apache Anda tidak memiliki izin baca / tulis di direktori.
Inilah yang Anda lakukan di Ubuntu
Pastikan semua file dimiliki oleh grup dan pengguna Apache. Di Ubuntu, ini adalah grup dan pengguna data www
chown -R www-data:www-data /path/to/webserver/www
Selanjutnya memungkinkan semua anggota grup www-data untuk membaca dan menulis file
chmod -R g+rw /path/to/webserver/www
Fungsi php mkdir()sekarang harus bekerja tanpa mengembalikan kesalahan
Apache memang membutuhkan izin untuk menulis hal-hal seperti cache dan log ... ini hanya masalah penyesuaian.
Manatax
@simpleengine Hai Saya telah memperhatikan jawaban Anda .. Saya menghadapi masalah yang sama dengan proyek yang saya coba buat di CodeIgnter dan mengembangkannya di Ubuntu 14.14 Lts .. Bisakah Anda jelaskan lebih lanjut kepada saya langkah-langkah yang perlu saya lakukan lakukan untuk memperbaiki kesalahan ini ??? Untuk memberi Anda beberapa info tambahan: jalur absolut adalah /opt/lampp/htdocs/www/my-app/public/uploads.. Pada dasarnya yang saya coba lakukan adalah setiap pengguna yang masuk mengunggah file di dalam folder unggahan dan juga membuat folder-album (ini akan dilakukan dengan php) untuk menyimpan foto ..
ltdev
6
Saya tidak suka pengguna yang terus mengatakan "tidak aman" tanpa menunjukkan cara aman untuk melakukannya.
che-azeh
38
Jawaban terlambat untuk orang yang menemukan ini melalui google di masa mendatang. Saya mengalami masalah yang sama.
CATATAN: SAYA PADA MAC OSX LION
Apa yang terjadi adalah bahwa apache dijalankan sebagai pengguna "_www" dan tidak memiliki izin untuk mengedit file apa pun. Anda akan melihat TIDAK ADA fungsi sistem file yang bekerja melalui php.
Bagaimana cara memperbaiki:
Buka jendela pencari dan dari bilah menu, pilih Buka> Buka Folder> / private / etc / apache2
sekarang buka httpd.conf
Temukan:
User _www
Group _www
ubah nama pengguna:
User<YOUR LOGIN USERNAME>
Sekarang restart apache dengan menjalankan terminal formulir ini:
sudo apachectl -k restart
Jika masih tidak berhasil, saya kebetulan melakukan hal berikut sebelum saya melakukan hal di atas. Bisa jadi terkait.
Buka terminal dan jalankan perintah berikut: (catatan, file server web saya terletak di / Library / WebServer / www. Ubah sesuai dengan lokasi situs web Anda)
Solusi ini berfungsi, tetapi memungkinkan Apache untuk mendatangkan malapetaka dengan sistem Anda jika seseorang mendapatkannya untuk mengeksekusi kode berbahaya (misalnya melalui eksploitasi Shellshock). Alternatifnya adalah membiarkan Apache berjalan sebagai _wwwdan membuat grup untuk Anda dan Apache. Buat grup baru, katakan dipanggil trusted, dan tempatkan diri Anda dan _wwwdi dalamnya. Kemudian jadikan tepercaya sebagai pemilik grup dari semua file di direktori dokumen server Anda. Terakhir, lakukan chmod g+rwxseperlunya pada file yang diakses Apache, sehingga trustedgrup memiliki izin untuk mengedit file.
Chris Middleton
3
hanya menimpali untuk menegaskan kembali bahwa jawaban ini adalah ide yang buruk. Ada banyak alasan yang sangat bagus mengapa proses apache dimiliki oleh pengguna tujuan khusus mereka sendiri.
danyamachine
16
Jangan tetapkan izin ke 777 saat menggunakan mkdir di PHP
Jawaban tautan saja tidak dianggap sebagai praktik yang baik di StackOverflow, tetapi saran yang diberikan di sini umumnya TIDAK boleh ditindaklanjuti.
Mohon berhenti menyarankan untuk menggunakan 777. Anda membuat file Anda dapat ditulisi oleh semua orang, yang berarti Anda kehilangan semua keamanan yang dirancang untuk sistem perizinan. Jika Anda menyarankan hal ini, pikirkan tentang konsekuensi yang mungkin ditimbulkannya pada server web yang tidak dikonfigurasi dengan baik: akan menjadi sangat mudah untuk "meretas" situs web, dengan menimpa file. Jadi, jangan.
Saya baru saja memecahkan masalah di pertanyaan awal dengan mengubah izin file menjadi 755 secara rekursif, menggunakan Filezilla. Klik kanan pada folder induk, dengan asumsi itu adalah semacam folder repositori file umum yang tidak masalah untuk mengatur 755 izin, lalu File Attributes -> Numeric Value -> 755, lalu centang "Recurse into sub directory". Perlu beberapa menit untuk menyebar melalui sub direktori jika Anda memiliki banyak file. Kemudian coba lagi.
TARKUS
7
Saya tahu bahwa utas ini sudah tua, tetapi mungkin ini akan membantu seseorang, suatu hari nanti.
Masalah mengapa PHP mengatakan "Izin ditolak" untuk mkdir () - jalur url salah. Jadi, untuk memperbaikinya, yang Anda butuhkan hanyalah mendapatkan jalur yang benar. Saya melakukannya dengan cara ini:
Terjadi pada saya saat mentransfer ke host baru (yang memiliki mysqlnd lol). Saya lupa mengganti ke jalur direktori home lengkap yang baru. Ternyata itu bukan masalah izin.
JSG
2
Anda harus memiliki izin sistem file untuk membuat direktori.
Contoh: Di Ubuntu 10.04 apache (php) berjalan sebagai pengguna: www-data dalam grup: www-data
Artinya pengguna www-data membutuhkan akses untuk membuat direktori.
Anda dapat mencobanya sendiri dengan menggunakan: 'su www-data' untuk menjadi pengguna www-data.
Sebagai perbaikan cepat, Anda dapat melakukan: sudo chmod 777 my_parent_dir
chmod 0777akan memberikan akses baca dan tulis ke dunia! Anda seharusnya tidak menyarankan hal seperti itu. Namun, saran dengan grup pengguna saat ini adalah yang terbaik di sini :)
KingCrunch
1
Jika dunia memiliki akses ke OS, tentu. Cara yang lebih baik adalah: sudo chown www-data: www-data my_parent_dir
Jon Skarpeteig
Atau biarkan izinnya sendiri dan tambahkan www-data ke grup direktori induk.
Marc B
0
Hal lain yang dapat Anda lakukan adalah pergi ke: / etc / sudoers
Di sana tambahkan baris berikut yang memberikan izin kepada pengguna tersebut www-data ALL = (ALL: ALL) ALL Mengapa www-data? ini karena apache dijalankan dengan nama pengguna ini.
Jika pengguna Anda berbeda maka coba nama pengguna ALL = (ALL: ALL) ALL
jangan mengedit sudoerssecara langsung, tetapi masuk sebagai root, dan gunakan visudoperintah te : yang memeriksa perubahan apa pun untuk menghindari pengeditan yang salah, yang dapat menyebabkan kesalahan parse saat file sudoers dimuat, yang mungkin membuat Anda tidak berdaya (karena tidak ada hak untuk mengubah apa pun)
Elias Van Ootegem
Bagaimana menemukan nama pengguna. seperti www-data? Saya menggunakan nginx tetapi tidak berfungsi
robspin
1
@robspin coba ini: ps aux | egrep '(nginx)'
maxwells
0
Karena Anda menggunakan mac, Anda dapat menambahkan diri Anda ke grup _www (grup pengguna apache) di mac Anda:
sudo dseditgroup -o edit -a $USER -t user _www
dan tambahkan pengguna _www ke grup roda yang sepertinya mac membuat file sebagai:
Saya memiliki masalah ini sekarang, solusi terbaik saya yang dapat saya berikan kepada Anda sekarang (meskipun Anda tidak menyertakan kode Anda) adalah:
Periksa bagaimana Anda memberi nama folder tujuan Anda, misalnya: folder_baru (terkadang ini dapat menyebabkan kesalahan untuk izin karena kebanyakan host tidak mengizinkan nama yang menggunakan garis bawah, tanda hubung, dll untuk dibuat pada waktu proses). Itu berhasil untuk saya.
Jika Anda menggunakan perintah rekursif untuk membuat sub-folder jangan lupa untuk meletakkan 0755 (ingat untuk menyertakan 0 di awal) ke perintah mkdir, misalnya:
if(!file_exists($output)){if(!mkdir($output,0755,true)){//0755die('Failed to create folders...');}}
Setelah Anda menginstal server ftp dengan sudo apt-get install vsftpdAnda harus mengkonfigurasinya. Untuk mengaktifkan akses tulis, Anda harus mengedit /etc/vsftpd.conffile dan menghapus komentar pada
#write_enable=YES
baris, jadi itu harus dibaca
write_enable=YES
Simpan file dan mulai ulang vsftpddengan sudo service vsftpd restart.
Jawaban:
Saya tahu ini adalah utas lama, tetapi perlu jawaban yang lebih baik. Anda tidak perlu menyetel izin ke 777, yang merupakan masalah keamanan karena ini memberikan akses baca dan tulis ke dunia. Mungkin pengguna apache Anda tidak memiliki izin baca / tulis di direktori.
Inilah yang Anda lakukan di Ubuntu
Pastikan semua file dimiliki oleh grup dan pengguna Apache. Di Ubuntu, ini adalah grup dan pengguna data www
chown -R www-data:www-data /path/to/webserver/www
Selanjutnya memungkinkan semua anggota grup www-data untuk membaca dan menulis file
chmod -R g+rw /path/to/webserver/www
Fungsi php
mkdir()
sekarang harus bekerja tanpa mengembalikan kesalahansumber
/opt/lampp/htdocs/www/my-app/public/uploads
.. Pada dasarnya yang saya coba lakukan adalah setiap pengguna yang masuk mengunggah file di dalam folder unggahan dan juga membuat folder-album (ini akan dilakukan dengan php) untuk menyimpan foto ..Jawaban terlambat untuk orang yang menemukan ini melalui google di masa mendatang. Saya mengalami masalah yang sama.
CATATAN: SAYA PADA MAC OSX LION
Apa yang terjadi adalah bahwa apache dijalankan sebagai pengguna "_www" dan tidak memiliki izin untuk mengedit file apa pun. Anda akan melihat TIDAK ADA fungsi sistem file yang bekerja melalui php.
Bagaimana cara memperbaiki:
Buka jendela pencari dan dari bilah menu, pilih Buka> Buka Folder> / private / etc / apache2
sekarang buka httpd.conf
Temukan:
ubah nama pengguna:
Sekarang restart apache dengan menjalankan terminal formulir ini:
Jika masih tidak berhasil, saya kebetulan melakukan hal berikut sebelum saya melakukan hal di atas. Bisa jadi terkait.
Buka terminal dan jalankan perintah berikut: (catatan, file server web saya terletak di / Library / WebServer / www. Ubah sesuai dengan lokasi situs web Anda)
sumber
_www
dan membuat grup untuk Anda dan Apache. Buat grup baru, katakan dipanggiltrusted
, dan tempatkan diri Anda dan_www
di dalamnya. Kemudian jadikan tepercaya sebagai pemilik grup dari semua file di direktori dokumen server Anda. Terakhir, lakukanchmod g+rwx
seperlunya pada file yang diakses Apache, sehinggatrusted
grup memiliki izin untuk mengedit file.Jangan tetapkan izin ke 777 saat menggunakan mkdir di PHP
Jawaban tautan saja tidak dianggap sebagai praktik yang baik di StackOverflow, tetapi saran yang diberikan di sini umumnya TIDAK boleh ditindaklanjuti.
Saya ingin kembali ke jawaban bagus ini untuk pertanyaan serupa . Saya mengutip:
sumber
Perbaiki hak akses dari direktori Anda mencoba untuk membuat direktori di .
sumber
Saya tahu bahwa utas ini sudah tua, tetapi mungkin ini akan membantu seseorang, suatu hari nanti.
Masalah mengapa PHP mengatakan "Izin ditolak" untuk mkdir () - jalur url salah. Jadi, untuk memperbaikinya, yang Anda butuhkan hanyalah mendapatkan jalur yang benar. Saya melakukannya dengan cara ini:
sumber
Anda harus memiliki izin sistem file untuk membuat direktori.
Contoh: Di Ubuntu 10.04 apache (php) berjalan sebagai pengguna: www-data dalam grup: www-data
Artinya pengguna www-data membutuhkan akses untuk membuat direktori.
Anda dapat mencobanya sendiri dengan menggunakan: 'su www-data' untuk menjadi pengguna www-data.
Sebagai perbaikan cepat, Anda dapat melakukan: sudo chmod 777 my_parent_dir
sumber
chmod 0777
akan memberikan akses baca dan tulis ke dunia! Anda seharusnya tidak menyarankan hal seperti itu. Namun, saran dengan grup pengguna saat ini adalah yang terbaik di sini :)Hal lain yang dapat Anda lakukan adalah pergi ke: / etc / sudoers
Di sana tambahkan baris berikut yang memberikan izin kepada pengguna tersebut www-data ALL = (ALL: ALL) ALL Mengapa www-data? ini karena apache dijalankan dengan nama pengguna ini.
Jika pengguna Anda berbeda maka coba nama pengguna ALL = (ALL: ALL) ALL
Ini berhasil untuk saya.
sumber
sudoers
secara langsung, tetapi masuk sebagai root, dan gunakanvisudo
perintah te : yang memeriksa perubahan apa pun untuk menghindari pengeditan yang salah, yang dapat menyebabkan kesalahan parse saat file sudoers dimuat, yang mungkin membuat Anda tidak berdaya (karena tidak ada hak untuk mengubah apa pun)Karena Anda menggunakan mac, Anda dapat menambahkan diri Anda ke grup _www (grup pengguna apache) di mac Anda:
dan tambahkan pengguna _www ke grup roda yang sepertinya mac membuat file sebagai:
sumber
Saya memiliki masalah ini sekarang, solusi terbaik saya yang dapat saya berikan kepada Anda sekarang (meskipun Anda tidak menyertakan kode Anda) adalah:
Jika Anda menggunakan perintah rekursif untuk membuat sub-folder jangan lupa untuk meletakkan 0755 (ingat untuk menyertakan 0 di awal) ke perintah mkdir, misalnya:
Ini juga berhasil untuk saya sekarang.
sumber
Jika Anda menggunakan LINUX, pertama-tama mari kita periksa pengguna apache, karena di beberapa distro dapat berbeda:
Katakanlah hasilnya adalah "http". Lakukan langkah berikut, ingat saja ubah path_to_folder ke jalur folder:
sumber
periksa apakah ini bukan masalah dengan umask
sumber
Setelah Anda menginstal server ftp dengan
sudo apt-get install vsftpd
Anda harus mengkonfigurasinya. Untuk mengaktifkan akses tulis, Anda harus mengedit/etc/vsftpd.conf
file dan menghapus komentar padabaris, jadi itu harus dibaca
Simpan file dan mulai ulang
vsftpd
dengansudo service vsftpd restart
.Untuk opsi konfigurasi lainnya, lihat dokumentasi ini atau
man vsftpd.conf
sumber
Kesalahan ini terjadi jika Anda menggunakan jalur yang salah.
Misalnya:
Saya menggunakan sistem ubuntu dan nama folder proyek saya adalah 'myproject'
Misalkan saya memiliki direktori myproject / public / report dan ingin membuat folder baru bernama orders
Maka saya membutuhkan seluruh jalur di mana proyek saya ada. Anda bisa mendapatkan jalur dengan perintah PWD
Jadi jalur root saya adalah = '/ home / htdocs / myproject /'
$ dir = '/ home / htdocs / myproject / public / report / Pesanan';
Ini akan berhasil untuk Anda !! Nikmati !!
sumber