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 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?
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 kesalahan
/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:
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)
sudo chmod 775 /Library/WebServer/www
sudo chmod 775 /Library/WebServer/www/*
_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.
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:
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.
Perbaiki hak akses dari direktori Anda mencoba untuk membuat direktori di .
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:
<?php
$root = $_SERVER["DOCUMENT_ROOT"];
$dir = $root . '/somefolder/';
if( !file_exists($dir) ) {
mkdir($dir, 0755, true);
}
?>
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 :)
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.
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)
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:
sudo dseditgroup -o edit -a _www -t user wheel
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:
if(!file_exists($output)){
if (!mkdir($output, 0755, true)) {//0755
die('Failed to create folders...');
}
}Ini juga berhasil untuk saya sekarang.
Jika Anda menggunakan LINUX, pertama-tama mari kita periksa pengguna apache, karena di beberapa distro dapat berbeda:
egrep -i '^user|^group' /etc/httpd/conf/httpd.conf
Katakanlah hasilnya adalah "http". Lakukan langkah berikut, ingat saja ubah path_to_folder ke jalur folder:
chown -R http:http path_to_folder
chmod -R g+rw path_to_folder
periksa apakah ini bukan masalah dengan umask
if (!function_exists('mkdir_r')) {
/**
* create directory recursively
* @param $dirName
* @param int $rights
* @param string $dir_separator
* @return bool
*/
function mkdir_r($dirName, $rights = 0744, $dir_separator = DIRECTORY_SEPARATOR) {
$dirs = explode($dir_separator, $dirName);
$dir = '';
$created = false;
foreach ($dirs as $part) {
$dir .= $part . $dir_separator;
if (!is_dir($dir) && strlen($dir) > 0) {
$created = mkdir($dir, $rights);
}
}
return $created;
}
}
if (!function_exists('ensure_dir')) {
/**
* ensure directory exist if not create
* @param $dir_path
* @param int $mode
* @param bool $use_mask
* @param int $mask
* @return bool
*/
function ensure_dir($dir_path, $mode = 0744, $use_mask = true, $mask = 0002) {
// set mask
$old_mask = $use_mask && $mask != null
? umask($mask)
: null;
try {
return is_dir($dir_path) || mkdir_r($dir_path, $mode);
} finally {
if ($use_mask && $old_mask != null) {
// restore original
umask($old_mask);
}
}
}
}
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.
Untuk opsi konfigurasi lainnya, lihat dokumentasi ini atauman vsftpd.conf
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';
if (!is_dir($dir)) {
mkdir($dir, 0775, true);
}
Ini akan berhasil untuk Anda !! Nikmati !!