Saya baru mengenal Laravel. Saya mencoba untuk membuka http://localhost/test/public/
dan mendapatkan
Kesalahan dalam handler pengecualian.
Saya googled sekitar dan mengubah izin direktori penyimpanan menggunakan chmod -R 777 app/storage
tetapi tidak berhasil.
Aku berubah debug=>true
di app.php
dan mengunjungi halaman dan mendapat Kesalahan dalam pengecualian handler:
Aliran atau file "/var/www/html/test/app/storage/logs/laravel.log" tidak dapat dibuka: gagal membuka streaming: Izin ditolak di / var / www / html / test / bootstrap / dikompilasi. php: 8423
Kemudian saya mengubah izin direktori penyimpanan menggunakan perintah chmod -R 644 app/storage
dan kesalahan 'Kesalahan dalam penanganan handler' hilang dan halaman dimuat. Tetapi di sana saya mendapatkan ini:
file_put_contents (/var/www/html/laravel/app/storage/meta/services.json): gagal membuka streaming: Izin ditolak
php artisan cache:clear
kemudianchmod -R 777 app/storage
akhirnyaphp artisan dump-autoload
Jawaban:
Saran dari vsmora berhasil bagi saya:
Laravel> = 5.4
Laravel <5.4
CATATAN: JANGAN MELAKUKANNYA PADA SERVER REMOTE INI (DEV ATAU PRODUKSI)
Ketika saya mengajukan pertanyaan ini, ini merupakan masalah di localhost saya, berjalan di Mesin Virtual. Jadi saya pikir pengaturan 777 cukup aman, namun, orang benar ketika mereka mengatakan Anda harus mencari solusi yang berbeda. Coba 775 dulu
sumber
php artisan cache:clear
laluchmod -R 777 storage
, dan kemudiancomposer dump-autoload
chmod -R 777 storage
sebaliknyaphp artisan cache:clear
adalah jawaban yang benar. Kemudiansudo chmod -R ug+rw storage
berikan izin yang benar untuk saya, tanpa memberiothers
baca / tulis atau terutama menjalankan hak istimewa.777
bukan khusus Laravel, tetapi proses berpikir untuk pengembang Laravel adalah: "membuatnya bekerja SEKARANG, saya tidak peduli bagaimana", sama seperti777
). Sebagai aturan umum, tidak pernah, menetapkan apa pun777
untuk mendapatkan sesuatu untuk bekerja. PAHAMI server dan pengguna / peran Anda dan atur sesuai; jangan diretas. Klien Anda memercayai Anda untuk melakukan ini dengan benar.Untuk googler yang telah menghadapi masalah ini dengan Laravel 5.
Ini adalah masalah izin yang disebabkan oleh pengguna yang berbeda yang mencoba menulis pada file log yang sama dalam
storage/logs
folder dengan izin yang berbeda.Apa yang terjadi adalah konfigurasi laravel Anda mungkin adalah pengaturan untuk mencatat kesalahan setiap hari dan oleh karena itu server web Anda (apache / nginx) dapat membuat file ini di bawah pengguna default tergantung pada lingkungan Anda, dapat berupa sesuatu seperti
_www
pada OSX atauwww-data
pada sistem * NIX, maka masalahnya datang ketika Anda mungkin telah menjalankan beberapa perintah artisan dan mendapat beberapa kesalahan, sehingga artisan akan menulis file ini tetapi dengan pengguna yang berbeda karena PHP pada terminal dijalankan oleh pengguna yang berbeda sebenarnya pengguna login Anda, Anda dapat memeriksanya dengan menjalankan perintah ini :Jika pengguna login Anda membuat file log server web Anda, Anda tidak akan dapat menulis kesalahan di dalamnya dan sebaliknya karena laravel menulis file log dengan
655
izin secara default yang hanya memungkinkan pemilik untuk menulis di dalamnya.Untuk memperbaiki ini sementara Anda harus secara manual memberikan izin untuk grup
664
ke file ini sehingga pengguna login dan pengguna server web Anda dapat menulis ke file log itu.Untuk menghindari masalah ini secara permanen, Anda mungkin ingin mengatur izin yang tepat ketika file baru dibuat dalam
storage/logs
direktori dengan mewarisi izin dari direktori ini. Jawaban ini https://unix.stackexchange.com/a/115632 dapat membantu Anda menangani bahwa.sumber
Anda seharusnya tidak memberikan 777 izin. Ini risiko keamanan. Untuk pengguna Ubuntu, di Laravel 5, saya menyarankan untuk mengganti pemilik untuk penyimpanan direktori secara rekursif:
Coba ikuti:
Dalam sistem berbasis Ubuntu, www-data adalah pengguna apache.
sumber
chmod 777
jawabannya. Terima kasih ~chmod 777
adalah mimpi buruk yang lengkap.chmod 777
konsekuensinya?Untuk semua orang yang menggunakan Laravel 5, Homestead dan Mac coba ini:
sumber
bootstrap/cache/compiled.php
sedang mencoba menulis ke direktori ini, tetapi tidak ada dan akhirnya melemparkan kesalahan izin. Terima kasih.beberapa kali SELINUX menyebabkan masalah ini; Anda dapat menonaktifkan selinux dengan perintah ini.
sumber
Masalah terpecahkan
ini memungkinkan izin tulis untuk aplikasi, kerangka kerja, log Semoga ini bisa membantu
sumber
TIDAK PERNAH MEMBERI IZIN INI 777!
buka direktori proyek laravel di terminal Anda dan tulis:
Dengan cara ini Anda menjadikan pengguna Anda pemilik dan memberikan hak istimewa:
1 Jalankan, 2 Tulis, 4 Baca
1 + 2 + 4 = 7 berarti (rwx)
2 + 4 = 6 berarti (rw)
akhirnya, untuk akses penyimpanan, ug + rwx berarti Anda memberi pengguna dan grup 7
sumber
Untuk pengguna gelandangan, solusinya adalah:
(dalam gelandangan) cache artisan php: hapus
(di luar gelandangan) chmod -R 777 aplikasi / penyimpanan
(dalam gelandangan) komposer dump-autoload
Pastikan Anda chmod di lingkungan lokal Anda dan tidak di dalam gelandangan penting di sini!
sumber
Coba lagi dengan
chmod -R 755 /var/www/html/test/app/storage
. Gunakan dengan sudo untukOperation not permitted
di chmod. Gunakan Periksa izin pemilik jika masih ada kesalahan.sumber
Sesuai Laravel 5.4 yang merupakan yang terbaru saat saya menulis ini, jika Anda memiliki masalah seperti ini, Anda perlu mengubah izin. JANGAN MENDENGARKAN SIAPA PUN YANG MENGATAKAN ANDA UNTUK MENGATUR 777 UNTUK ARAH APA PUN. Ini memiliki masalah keamanan. Ubah izin folder penyimpanan seperti ini
Ubah izin folder bootstrap seperti ini
Sekarang pastikan Anda menjalankan kedua perintah dari direktori aplikasi Anda. Anda tidak akan menghadapi masalah di masa depan terkait izin. 775 tidak membahayakan keamanan mesin Anda.
sumber
Sarankan izin yang benar, jika untuk Apache,
sumber
Jika Anda memiliki Laravel 5 dan mencari solusi permanen, berlaku
php artisan
penggunaan baris perintah dan server Apache menggunakan ini:sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart
Lihat penjelasan rinci di sini .
sumber
UNTUK SIAPA PUN YANG MENJALANKAN OS DENGAN SELINUX: Cara yang benar untuk memungkinkan httpd untuk menulis ke folder penyimpanan laravel adalah:
Kemudian untuk menerapkan perubahan segera:
SELinux bisa menjadi susah untuk dihadapi, tetapi jika itu ada maka saya SANGAT MENYARANKAN Anda mempelajarinya daripada melewatinya sepenuhnya.
sumber
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/path/to/www/storage(/.*)?'
Saya memiliki masalah yang sama dan langkah-langkah di bawah ini membantu saya memperbaiki masalah ini.
<?php echo exec('whoami'); ?>
Dan jalankan file dari browser web. Itu akan memberi pengguna apache. Dalam kasus saya, ini adalah pengguna ec2 karena saya menggunakan aws dengan cronjob diinstal di /etc/cron.d/. Bisa jadi pengguna berbeda untuk orang lain.
sudo chown -R ec2-user:<usergroup> /app-path/public
Anda perlu mengidentifikasi dan menggunakan "pengguna" dan "grup pengguna" yang tepat di sini.
sumber
Jika Anda menggunakan Linux atau Mac, bahkan Anda juga bisa menjalankan
ssh terminal
. Anda dapat menggunakan terminal untuk menjalankan perintah ini,Jika Anda menggunakan windows, Anda dapat menjalankan menggunakan
git bash
.Anda dapat mengunduh formulir git https://git-scm.com/downloads .
sumber
Xampp untuk digunakan:
sumber
Setiap kali saya mengubah app.php, saya mendapat izin untuk tidak menulis bootstrap / cache / services.json jadi saya melakukan ini untuk memperbaikinya:
sumber
memecahkan ini untukku
sumber
Menetapkan izin ke 777 adalah ide yang sangat buruk!
... tapi
Jika Anda mendapatkan kesalahan izin terhubung dengan folder "penyimpanan", itulah yang berhasil bagi saya:
sumber
Jika menggunakan laradock, coba
chown -R laradock:www-data ./storage
di wadah ruang kerja Andasumber
Dalam kasus saya, solusinya adalah mengubah izin
app/storage/framework/views
danapp/storage/logs
direktori.sumber
Jika orang lain mengalami masalah yang sama dengan kesalahan izin file fopen, tetapi cukup bijak untuk tidak membabi buta chmod 777 di sini adalah saran saya.
Periksa perintah yang Anda gunakan untuk izin yang dibutuhkan apache:
'R' berarti terbuka hanya untuk dibaca, dan jika Anda tidak mengedit file, ini adalah apa yang seharusnya Anda atur. Ini berarti apache / www-data membutuhkan setidaknya membaca izin pada file itu, yang jika file dibuat melalui laravel maka sudah akan memiliki izin membaca.
Jika karena alasan apa pun Anda harus menulis ke file:
Kemudian pastikan apache juga memiliki izin untuk menulis ke file tersebut.
http://php.net/manual/en/function.fopen.php
sumber
Mulai saja menggunakan server Anda
artisian
php artisian serve
Kemudian akses proyek Anda dari URL yang ditentukan:
sumber
Saya memiliki masalah yang sama ketika menjalankan gelandangan di mac. memecahkan masalah dengan mengubah pengguna server Apache dalam file https.conf:
Jalankan apache di bawah pengguna php, bukan daemon pengguna untuk menyelesaikan masalah akses file dengan php
sekarang, file cache yang dibuat php dapat dibaca dan diedit dengan apache tanpa menunjukkan kesalahan izin akses.
sumber
Setelah banyak percobaan dan kesalahan dengan izin direktori saya berakhir dengan pencerahan ... tidak ada ruang yang tersisa di partisi disk. Hanya ingin berbagi untuk memastikan tidak ada orang lain yang cukup bodoh untuk terus mencari solusi ke arah yang salah.
Di Linux, Anda dapat menggunakan
df -h
untuk memeriksa ukuran disk dan ruang kosong Anda.sumber
Masalah ini sebenarnya disebabkan oleh berbagai pengguna yang ingin
write/read
mengajukan tetapi ditolak menyebabkan kepemilikan yang berbeda. mungkin Anda sebagai 'root' menginstal laravel sebelum kemudian Anda masuk ke situs Anda sebagai pengguna 'laravel' di mana 'laravel' kepemilikan default, jadi ini adalah masalah sebenarnya di sini. Jadi ketika pengguna 'laravel' ingin membaca / menulis semua file dalam disk sebagai default, untuk ditolak, menyebabkan file tersebut memiliki kepemilikan oleh 'root'.Untuk mengatasi masalah ini, Anda dapat mengikuti seperti ini:
sudo chown -hR your-user-name /root /nameforlder
atau dalam kasus saya
sudo chown -hR igmcoid /root /sublaravel
Catatan kaki:
root
sebagai nama kepemilikan pertama yang diinstal sebelumnyayour-user-name
sebagai kepemilikan default yang benar-benar menulis / membaca di situs.namefolder
sebagai folder nama yang ingin Anda ubah kepemilikannya.sumber
Semoga ini bisa membantu entah di mana ...
sumber
Saat bekerja pada Windows 10 dengan Laragon dan Laravel 4, bagi saya tampaknya tidak ada cara untuk mengubah izin secara manual, karena menjalankan-
chmod
perintah di terminal Laragon-in-built-terminal tidak berpengaruh.Namun, ada kemungkinan di terminal ini untuk pergi ke folder penyimpanan dan secara manual menambahkan folder yang diinginkan seperti ini:
Perintah-
cd
di terminal membawa Anda ke folder (Anda mungkin perlu menyesuaikan jalur ini agar sesuai dengan struktur file Anda). Itumkdir
akan membuat direktori dengan nama yang diberikan.Saya tidak memiliki kesempatan untuk menguji pendekatan ini di Laravel 5, tetapi saya berharap bahwa pendekatan yang sama akan berhasil.
Tentu saja mungkin ada cara yang lebih baik, tetapi setidaknya ini adalah solusi yang masuk akal untuk situasi saya (memperbaiki kesalahan:)
file_put_contents(/var/www/html/laravel/app/storage/meta/services.json): failed to open stream
.sumber
Saya telah memecahkan masalah saya dengan melakukan ini.
sumber
Saya telah mencoba memberikan
777
akses ke folder penyimpanan dan itu berfungsi untuk saya1) pergi ke direktori root laravel Anda, (
/var/www/html
untuk saya) dan jalankan perintah berikutsumber