Saya terus mendapatkan kesalahan ini ketika mencoba mengkonfigurasi direktori unggah dengan Apache 2.2 dan PHP 5.3 di CentOS.
Di php.ini:
upload_tmp_dir = /var/www/html/mysite/tmp_file_upload/
Di httpd.conf:
Directory /var/www/html/mysite/tmp_file_upload/>
Options -Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory /var/www/html/mysite/images/>
Options -Indexes
</Directory>
Izin direktori CentOS:
drwxrwxr-x 2 root root 4096 Nov 11 10:01 images
drwxr-xr-x 2 root root 4096 Nov 12 04:54 tmp_file_upload
Apa pun yang saya lakukan, saya tetap mendapatkan kesalahan ini dari PHP ketika saya mengunggah file:
Peringatan: move_uploaded_file (images / robot.jpg): gagal membuka streaming: Izin ditolak di /var/www/html/mysite/process.php on line 78
Peringatan: move_uploaded_file (): Tidak dapat memindahkan '/ tmp / phpsKD2Qm' ke 'images / robot.jpg' di /var/www/html/mysite/process.php on line 78
Seperti yang Anda lihat, tidak pernah mengambil konfigurasi dari file php.ini mengenai file unggahan.
Apa yang saya lakukan salah di sini?
php
upload
file-permissions
pengguna63898
sumber
sumber
Jawaban:
Ini karena
images
dantmp_file_upload
hanya dapat ditulis olehroot
pengguna. Agar unggahan berfungsi, kita perlu membuat pemilik folder-folder itu sama dengan pemilik proses httpd ATAU membuatnya bisa ditulis secara global (praktik buruk).$ps aux | grep httpd
. Kolom pertama akan menjadi pemilik biasanyanobody
Ubah pemilik
images
dantmp_file_upload
menjadinobody
atau apa pun pemilik yang Anda temukan di langkah 1.Chmod
images
dantmp_file_upload
sekarang dapat ditulis oleh pemilik, jika diperlukan [Sepertinya Anda sudah memiliki ini di tempat]. Disebutkan dalam jawaban @Dmitry Teplyakov.Untuk detail lebih lanjut mengapa perilaku ini terjadi, periksa manual http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir , perhatikan bahwa ini juga berbicara tentang
open_basedir
arahan.sumber
jacob
(saya karena ini adalah mesin lokal saya) dan semua folder memiliki755
atau775
.sudo service httpd restart
setelah mengubah izin. Kemudian berhasil :) Alih-alih mengubah pemilik,chown
saya menambahkan proses apache saya ke grup 'www' dan menambahkan direktori ini ke grup 'www' yang sama melaluichgrp
Anda juga dapat menjalankan skrip ini untuk mengetahui pemilik proses Apache:
<?php echo exec('whoami'); ?>
Dan kemudian ubah pemilik direktori tujuan ke apa yang Anda miliki. Gunakan perintah:
Dan kemudian gunakan perintah itu
untuk mengubah izin direktori tujuan.
sumber
<?php echo exec('whoami'); ?>
. Adakah yang tahu mengapa?exec('whoami')
. Menyelamatkan saya 30 menit lagi. sedang mengunyah pengguna ubuntuwww-data
? biasanyaJika Anda memiliki Mac OS X, buka root file atau folder situs web Anda.
Kemudian klik kanan padanya, pergi untuk mendapatkan informasi, pergi ke paling bawah ( Berbagi & Izin ), buka itu, ubah semua hanya-baca untuk membaca dan menulis. Pastikan untuk membuka gembok, pergi ke ikon pengaturan, dan pilih Terapkan ke item terlampir ...
sumber
/private/var/tmp
pada Mac saya.Ini berhasil untuk saya.
Kemudian logout atau reboot.
Jika
SELinux
mengeluh, coba yang berikut inisumber
Saya ingin menambahkan ini ke saran sebelumnya. Jika Anda menggunakan versi Linux yang memiliki SELinux diaktifkan maka Anda juga harus menjalankan ini dalam shell:
Bersamaan dengan memberikan izin pengguna server web Anda baik melalui grup atau mengubah pemilik direktori.
sumber
restorecon -R -v /path/to/your/directory
mungkin juga perlu dimasukkan dalam ini setelahnya. access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/…Ubah izin untuk folder ini
# chmod -R 0755 /var/www/html/mysite/images/
sumber
Coba ini:
buka / etc / apache2 / envvars
ganti
www-data
denganyour_username
ubah dengan
sumber
Saya mengalami masalah terkait ini bahkan setelah sudah berhasil menjalankan komposer. Saya memperbarui komposer, dan ketika berlari
composer install
atauphp composer.phar install
mendapat:Ternyata setelah banyak penelitian bahwa jawaban sebelumnya tentang mengubah izin untuk folder berfungsi. Mereka hanya direktori yang sedikit berbeda sekarang.
Dalam instal saya, pada OS X, file cache ada di
/Users/[USER]/.composer/cache
, dan saya mengalami masalah karena file cache dimiliki oleh root. Mengubah kepemilikan '.komposer' secara rekursif kepada pengguna saya memecahkan masalah.Inilah yang saya lakukan:
Kemudian saya menjalankan komposer menginstal lagi dan voila!
sumber
Masalah ini terjadi ketika pengguna apache (www-data) tidak memiliki izin untuk menulis di folder. Untuk memecahkan masalah ini, Anda harus memasukkan pengguna ke dalam grup www-data.
Saya baru saja membuat ini:
Jalankan kode php ini
<?php echo exec('whoami'); ?>
untuk menemukan pengguna yang digunakan oleh apache. Setelah itu, jalankan perintah di terminal:Ini akan mengembalikan sesuatu seperti ini:
Saya menyimpan pengguna tetapi mengubah grup menjadi www-data
sumber
Solusinya sangat mudah. Hanya klik kanan folder IMAGE (tujuan), buka properti, klik tab izin, dan ubah akses orang lain ke Buat dan hapus file .
sumber
Hanya mengubah izin tmp_file_upload ke 755 Mengikuti adalah perintah chmod -R 755 tmp_file_upload
sumber
Coba ini
find /var/www/html/mysite/images/ -type f -print0 | xargs -0 chmod -v 664
sumber