file_put_contents (meta / services.json): ไม่สามารถเปิดสตรีม: ปฏิเสธการอนุญาต


169

ฉันใหม่สำหรับ Laravel ฉันพยายามที่จะเปิดhttp://localhost/test/public/และได้รับ

ข้อผิดพลาดในตัวจัดการข้อยกเว้น

ฉัน googled ไปรอบ ๆ และเปลี่ยนการอนุญาตของไดเรกทอรีจัดเก็บโดยใช้chmod -R 777 app/storageแต่ไม่มีประโยชน์

ผมเปลี่ยนdebug=>trueในapp.phpและเยี่ยมชมหน้าและมีข้อผิดพลาดในการจัดการข้อยกเว้น:

ไม่สามารถเปิดสตรีมหรือไฟล์ "/var/www/html/test/app/storage/logs/laravel.log": ไม่สามารถเปิดสตรีมได้: ไม่สามารถเปิดสตรีม: การอนุญาตถูกปฏิเสธใน / var / www / html / test / bootstrap / รวบรวม PHP: 8423

จากนั้นฉันเปลี่ยนสิทธิ์ของไดเรกทอรีที่เก็บข้อมูลโดยใช้คำสั่งchmod -R 644 app/storageและข้อผิดพลาด 'ข้อผิดพลาดในตัวจัดการข้อยกเว้น' หายไปและโหลดหน้า แต่ในที่นั่นฉันได้รับสิ่งนี้:

file_put_contents (/var/www/html/laravel/app/storage/meta/services.json): ไม่สามารถเปิดสตรีม: ปฏิเสธการอนุญาต


2
ดูเหมือนปัญหา permition อีกครั้ง chmod ซ้ำไดเรกทอรีแอพลิเคชันทั้งหมด
— อาลู

@alou ฉันคิดว่าฉันได้ทำไปแล้วด้วย chmod -R 777 แอพ / ที่เก็บข้อมูล ไม่ใช่เหรอ และไดเรกทอรีทั้งหมดภายในแอปมีสิทธิ์ drwxrwxrwx
— vishnub1626

33
ลอง: php artisan cache:clearแล้วchmod -R 777 app/storageในที่สุดphp artisan dump-autoload
— vsmoraes

@vsmoraes มันใช้ได้ มันจะมีประโยชน์มากถ้าคุณสามารถอธิบายได้ว่าปัญหาคืออะไร
— vishnub1626

7
ความคิดเห็นของ vsmoraes ถูกต้อง แต่แทนที่จะเป็น 'php artisan dump-autoload' ควรเป็น 'นักแต่งเพลง dump-autoload'
— Elliot Robert

คำตอบ:


320

คำแนะนำจากvsmoraes ใช้ได้สำหรับฉัน:

Laravel> = 5.4

php artisan cache:clear 
chmod -R 777 storage/
composer dump-autoload

Laravel <5.4

php artisan cache:clear 
chmod -R 777 app/storage 
composer dump-autoload

หมายเหตุ: อย่าทำเช่นนี้กับเซิร์ฟเวอร์ระยะไกล (DEV หรือการผลิต)

เมื่อฉันถามคำถามนี้นี่เป็นปัญหาของ localhost ที่ทำงานในเครื่องเสมือน ดังนั้นฉันจึงคิดว่าการตั้งค่า 777 นั้นปลอดภัยพออย่างไรก็ตามผู้คนพูดถูกเมื่อคุณบอกว่าคุณควรมองหาวิธีแก้ปัญหาอื่น ลอง 775 ก่อน


8
นี่ควรเป็น sudo chmod -R 777 แอพ / ที่เก็บข้อมูล เพื่อหลีกเลี่ยงข้อผิดพลาดการอนุญาต
— Olaitan Mayowa

5
สำหรับ # Laravel5 คำแนะนำเกือบเหมือนกัน: php artisan cache:clearจาก chmod -R 777 storageนั้นจึง composer dump-autoload
— WNRosenberg

6
หากคุณกำลังใช้ Laravel 5.1+ คุณจะต้องทำchmod -R 777 storageแทน
— James

10
php artisan cache:clearเป็นคำตอบที่ถูกต้อง จากนั้นsudo chmod -R ug+rw storageให้สิทธิ์ที่ถูกต้องสำหรับฉันโดยไม่ต้องให้others
— Zack Morris

43
คำตอบนี้และด้ายคือสิ่งที่ไฮไลท์ว่าทำไมฉันไม่ชอบ Laravel มาก: มันสอนให้นักพัฒนาที่คุณสามารถทำอะไรที่คุณต้องการเมื่อใดก็ตามที่คุณต้องการเป็นอย่างที่คุณต้องการโดยไม่คิดผลที่ตามมา (ผมเข้าใจ777ไม่ Laravel เฉพาะ แต่ กระบวนการคิดสำหรับนักพัฒนา Laravel คือ: "ทำให้มันทำงานได้ในตอนนี้ฉันไม่สนเหมือนกัน" เหมือน777) ตามกฎทั่วไปไม่เคยตั้งค่าอะไร777เพื่อให้ได้งาน ทำความเข้าใจกับเซิร์ฟเวอร์และผู้ใช้ / บทบาทของคุณและตั้งค่าให้เหมาะสม อย่าแฮ็คมัน ลูกค้าของคุณเชื่อใจคุณให้ทำสิ่งนี้ถูกต้อง
— dKen

70

สำหรับ googler ที่ประสบปัญหานี้กับ Laravel 5

นี่เป็นปัญหาสิทธิ์ที่เกิดจากผู้ใช้หลายคนพยายามเขียนที่ไฟล์บันทึกเดียวกันภายในstorage/logsโฟลเดอร์ที่มีสิทธิ์ต่างกัน

สิ่งที่เกิดขึ้นคือการกำหนดค่า laravel ของคุณอาจถูกตั้งค่าให้บันทึกข้อผิดพลาดทุกวันดังนั้นเว็บเซิร์ฟเวอร์ของคุณ (apache / nginx) อาจสร้างไฟล์นี้ภายใต้ผู้ใช้เริ่มต้นขึ้นอยู่กับสภาพแวดล้อมของคุณซึ่งอาจเป็นสิ่งที่ต้องการ_wwwบน OSX หรือwww-dataระบบ * NIX เกิดขึ้นเมื่อคุณอาจรันคำสั่ง artisan และมีข้อผิดพลาดบางอย่างดังนั้นช่างฝีมือจะเขียนไฟล์นี้ แต่มีผู้ใช้คนอื่นเนื่องจาก PHP บนเทอร์มินัลถูกดำเนินการโดยผู้ใช้คนอื่นจริง ๆ แล้วผู้ใช้เข้าสู่ระบบของคุณ :

php -i | grep USER

หากผู้ใช้ล็อกอินของคุณสร้างไฟล์บันทึกนั้นเว็บเซิร์ฟเวอร์ของคุณคุณจะไม่สามารถเขียนข้อผิดพลาดได้และในทางกลับกันเพราะ laravel เขียนไฟล์บันทึกด้วย 655สิทธิ์โดยค่าเริ่มต้นซึ่งอนุญาตให้เจ้าของเขียนได้เท่านั้น

ในการแก้ไขปัญหาชั่วคราวนี้คุณจะต้องให้สิทธิ์แก่กลุ่ม664ในไฟล์นี้ด้วยตนเอง เพื่อให้ทั้งผู้ใช้ที่ล็อกอินของคุณและผู้ใช้เว็บเซิร์ฟเวอร์สามารถเขียนไปยังไฟล์บันทึกนั้นได้

เพื่อหลีกเลี่ยงปัญหานี้อย่างถาวรคุณอาจต้องการตั้งค่าการอนุญาตที่เหมาะสมเมื่อไฟล์ใหม่ถูกสร้างขึ้นในstorage/logsdir โดยสืบทอดสิทธิ์จากไดเรกทอรีคำตอบนี้https://unix.stackexchange.com/a/115632สามารถช่วยคุณจัดการกับ ที่.


คำตอบจากแฟนคลับ - friggen-tastic ที่นี่! ฉันกำลังใช้งาน Elastic Beanstalk และผู้ใช้ PHP บรรทัดคำสั่งของฉันคือ "ผู้ใช้ ec2" แต่แอปพลิเคชันของฉันทำงานเป็น "webapp"
— แรนดี้ L

1
คำตอบที่อธิบายถึงปัญหา เช่นคำตอบที่เหมาะสม
— Craicerjack

สิ่งนี้ช่วยให้ฉันรู้ว่าทำไมฉันถึงได้รับข้อผิดพลาดแคชไฟล์ใน Laravel บน Cloudways ฉันต้องกดปุ่มในแผง Cloudways เพื่อรีเซ็ตสิทธิ์ของไฟล์ ขอบคุณ
— Ryan

44

คุณไม่ควรให้สิทธิ์ 777 มันเสี่ยงต่อความปลอดภัย สำหรับผู้ใช้ Ubuntu ใน Laravel 5 ฉันมีความปรารถนาที่จะเปลี่ยนเจ้าของสำหรับการจัดเก็บไดเรกทอรีซ้ำ:

ลองทำตาม:

sudo chown -R www-data:www-data storage

ในระบบที่ใช้ Ubuntu นั้น www-data เป็นผู้ใช้ apache


2
การแก้ไขนี้สำหรับฉันและถูกต้องกว่า (ฉันคิดว่า) กว่าchmod 777คำตอบ ขอบคุณ ~
— GavinR

ฉันคิดว่ามันเป็นคำตอบที่สะดวกที่สุดสำหรับผู้ใช้ Linux ขอบคุณ @GavinR chmod 777เป็นฝันร้ายที่สมบูรณ์
— Abdalla Arbab

สิ่งนี้ใช้ได้สำหรับฉันและเป็นตัวเลือกที่ดีกว่า chmod -777
— Egnaro

ขอบคุณสำหรับวิธีการใหม่ในการแก้ปัญหา! เราจำเป็นต้องทำอะไรบางอย่างก่อน / หลังคำสั่งของคุณเพื่อย้อนกลับchmod 777ผลที่ตามมา?
— Aleksandar

41

สำหรับทุกคนที่ใช้ Laravel 5, Homestead และ Mac ลองทำสิ่งนี้:

mkdir storage/framework/views

นี้ยังทำงานร่วมกับการทำเซิร์ฟเวอร์ใหม่กับ Laravel Forge กับ Laravel 5.2.7
— winkster

2
มันทำเพื่อฉัน ดูเหมือนว่าbootstrap/cache/compiled.phpกำลังพยายามเขียนไปยังไดเรกทอรีนี้ แต่มันไม่ได้มีอยู่และจบลงด้วยการโยนข้อผิดพลาดการอนุญาต ขอบคุณ.
— Matt K

1
ยังไงก็เถอะมันก็ใช้ได้สำหรับฉัน ฉันใช้ laravel 5.1 btw
— Yohanes Gultom

ขอบคุณสำหรับสิ่งนี้ ฉันลบไดเรกทอรีที่เก็บข้อมูลทั้งหมดของฉันโดยคิดว่าสิ่งนี้จะถูกสร้างขึ้นโดย laravel อีกครั้งอย่าเดาเลย
— grimmdude

33

บางครั้ง SELINUX ทำให้เกิดปัญหานี้ คุณสามารถปิดใช้งาน selinux ด้วยคำสั่งนี้

sudo setenforce 0

ว้าวฉันทำกลอุบายและใช้งานได้จริงบางคนสามารถอธิบายให้ฉันฟังว่าทำไมมันถึงใช้ได้ selinux คืออะไร
— undefinedman

ใช่มันใช้งานได้จริง! โปรดช่วยพวกเราในการทำความเข้าใจกับ SELINUX ด้วยกูรู? ฉันใช้ fedora 24 btw
— loki9

1
ขอบคุณมาก ฉันค้นหาสุทธิและทุกคนพูดกับฉันตรวจสอบการอนุญาตตรวจสอบผู้ใช้และอื่น ๆ ...
— Ali ZahediGol

3
นี่เป็นเหมือนการปิดไฟร์วอลล์ทั้งหมดเพราะมันปิดกั้นพอร์ตที่คุณต้องการเปิด
— Teh JoE

ฉันไม่เคยได้ยินเรื่องนี้ "Security-Enhanced Linux (SELinux) เป็นโมดูลความปลอดภัยเคอร์เนลของ Linux ที่มีกลไกสำหรับสนับสนุนนโยบายความปลอดภัยการควบคุมการเข้าถึง" ฉันสงสัยว่ามันเป็นความคิดที่ดีที่จะปิด และฉันพนันได้เลยว่าผู้ upvoters ใช้คำสั่งนี้โดยไม่เข้าใจผลที่เกิดขึ้นอย่างสมบูรณ์
— Ryan

18

แก้ไขปัญหา

php artisan cache:clear
sudo chmod -R 777 vendor storage

สิ่งนี้ทำให้การอนุญาตให้เขียนแอพ, กรอบงาน, บันทึกหวังว่าจะช่วยได้


12
ไม่เคย 777 ... ใน dev หรือกระทุ้งเพราะมันจะให้ภาพลวงตาของสิ่งที่ทำงานใน dev แต่พวกเขาจะบุกใน prod เว้นแต่ 777 เช่นกันซึ่งไม่เคยมีความคิดที่ดี
— Kyle Burkett

wooha you rock ... ผู้ขายคือคนที่ฉันขาดไป
— lu1s

ใช่การให้ทุกอย่างในที่สาธารณะทางเว็บ 777 เป็นความคิดที่ไม่ดี
— imabug

17

อย่าให้สิทธิ์ 777!

ไปที่ไดเรกทอรีของโครงการ laravel บนเทอร์มินัลของคุณและเขียน:

sudo chown -R your-user:www-data /path/to/your/laravel/project/
sudo find /same/path/ -type f -exec chmod 664 {} \;
sudo find /same/path/ -type d -exec chmod 775 {} \;
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

วิธีที่คุณทำให้ผู้ใช้ของคุณเป็นเจ้าของและมอบสิทธิพิเศษนี้:
1 ดำเนินการ, 2 เขียน, 4 อ่าน
1 + 2 + 4 = 7 หมายถึง (rwx)
2 +4 = 6 หมายถึง (rw)
ในที่สุดสำหรับการเข้าถึงที่เก็บ ug + rwx หมายความว่าคุณให้ผู้ใช้และกลุ่มเป็น 7


1
ฉันไม่รู้ว่าทำไมมาก dev ต้องการใช้ 777 ... อย่างใดพวกเขาไม่สนใจเกี่ยวกับระบบของพวกเขา ..
— ZeroOne

15

สำหรับผู้ใช้ที่ใช้วิธีแก้ปัญหาคือ:

(ในคนจรจัด) แคชช่าง PHP: ชัดเจน

chmod -R 777 แอพ / ที่เก็บข้อมูล

(ในคนจรจัด) นักแต่งเพลง dump-autoload

ให้แน่ใจว่าคุณ chmod ในสภาพแวดล้อมท้องถิ่นของคุณและไม่ได้อยู่ในคนจรจัดเป็นสิ่งสำคัญที่นี่!


6
ไม่เปิด 777 ด้วยเหรอ?
— simo

3
ฉันหมายถึงสำหรับการผลิตแน่นอน แต่นี่คือสภาพแวดล้อมท้องถิ่น 777 เป็นสิ่งที่ผู้ใช้ดั้งเดิมใช้โปสเตอร์และคำตอบอื่น ๆ 775 หรือ 755 อาจทำงานได้ขึ้นอยู่กับ
— เบรนแดน

12

chmod -R 755 /var/www/html/test/app/storageลองอีกครั้งด้วย ใช้กับ sudo สำหรับOperation not permittedใน chmod ใช้ตรวจสอบสิทธิ์ของเจ้าของหากยังคงมีข้อผิดพลาด


ไม่ทำงาน. ไดเรกทอรีทั้งหมดภายในแอพมีสิทธิ์ drwxrwxrwx
— vishnub1626

@tav คุณสามารถโปรดตรวจสอบการอนุญาตจากเจ้าของสำหรับโฟลเดอร์ทดสอบของคุณหรือไม่
— Khay

drwxrwxrwx เดียวกัน แก้ไขปัญหาโดยใช้คำแนะนำของ @ vsmoraes (ดูความคิดเห็น)
— vishnub1626

4
chmod 777 มีความเสี่ยงด้านความปลอดภัย
— Yogesh Kamat

9

ตาม Laravel 5.4 ซึ่งเป็นเวอร์ชั่นล่าสุดที่ฉันเขียนนี้หากคุณมีปัญหาใด ๆ เช่นนี้คุณต้องเปลี่ยนการอนุญาต อย่าฟังใครก็ตามที่บอกให้คุณตั้งค่า 777 สำหรับไดเรกทอรีใด ๆ มันมีปัญหาด้านความปลอดภัย เปลี่ยนสิทธิ์ของโฟลเดอร์จัดเก็บข้อมูลเช่นนี้

sudo chmod -R 775 storage

เปลี่ยนสิทธิ์การบูตโฟลเดอร์เช่นนี้

sudo chmod -R 775 bootstrap/cache

ตอนนี้โปรดตรวจสอบให้แน่ใจว่าคุณกำลังรันทั้งสองคำสั่งจากไดเรกทอรีแอปพลิเคชันของคุณ คุณจะไม่ประสบปัญหาในอนาคตเกี่ยวกับการอนุญาต 775 ไม่ทำลายความปลอดภัยของเครื่องของคุณ


7

แนะนำการอนุญาตที่ถูกต้องหากสำหรับ Apache

sudo chown -R apache:apache apppath/app/storage

การใช้ Laravel Forge: sudo chown -R forge: forge ~ / project / storage / sudo chown -R forge: forge ~ / project / bootstrap / cache /
— Flappy

6

หากคุณมีLaravel 5และกำลังมองหาโซลูชันถาวรสามารถphp artisanใช้งานได้ทั้งการใช้บรรทัดคำสั่งและเซิร์ฟเวอร์ Apache:

sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart

ดูคำอธิบายรายละเอียดที่นี่


8
ดูเหมือนจะเป็นความคิดที่ดีที่จะใช้ 777
— Randy L

ขอ 000 ค่าเป็น resolv.conf?! ผู้คนนี้รับข้อมูลนี้จากที่ไหน นั่นคือบรรทัดที่ไม่ถูกต้องใน resolv.conf โปรดเพิกเฉยต่อสิ่งนี้และ "วิธีแก้ปัญหา" ทั้งหมด 777 ข้อ
— higuita

ตรวจสอบ URL และค้นหาตัวเลือก umask ใน resolv.conf linux.die.net/man/5/resolv.conf
— higuita

6

สำหรับทุกคนที่ใช้ระบบปฏิบัติการด้วย SELINUX: วิธีที่ถูกต้องในการอนุญาตให้ httpd เขียนไปยังโฟลเดอร์หน่วยเก็บ laravel คือ:

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/path/to/www/storage(/.*)?'

จากนั้นให้ใช้การเปลี่ยนแปลงทันที:

sudo restorecon -F -r '/path/to/www/storage'

SELinux สามารถจัดการกับความเจ็บปวดได้ แต่ถ้ามันมีอยู่ฉันอยากจะแนะนำให้คุณเรียนรู้มันอย่างหนักหน่วงมากกว่าที่จะผ่านมันไป


ปัญหาที่แน่นอนของฉันใน centos สด 7 ก็คล้ายกัน มันบอกว่าไม่ได้รับอนุญาตให้เขียน แต่ทั้งหมดนั้นเป็น 777 สำหรับการทดสอบ ดังนั้นโพสต์นี้จะช่วยประหยัดเวลาของฉันหลังจากการตรวจสอบทั่วไปทั้งหมด
— HumaN

1
นี่เป็นวิธีที่ถูกต้องแม้ว่าฉันคิดว่าประเภท SELinux ที่ถูกต้องควรเป็น httpd_sys_rw_content_t sudo semanage fcontext -a -t httpd_sys_rw_content_t '/path/to/www/storage(/.*)?'
— imabug

4

ฉันมีปัญหาเดียวกันและขั้นตอนด้านล่างช่วยฉันแก้ไขปัญหา

  1. ค้นหาผู้ใช้ apache - สร้างไฟล์ test.php ในโฟลเดอร์สาธารณะด้วยรหัส

<?php echo exec('whoami'); ?>

และเรียกใช้ไฟล์จากเว็บเบราว์เซอร์ มันจะให้ผู้ใช้ apache ในกรณีของฉันมันเป็นผู้ใช้ ec2 เพราะฉันใช้ aws กับ cronjob ติดตั้งใน /etc/cron.d/ อาจเป็นผู้ใช้อื่นสำหรับผู้อื่น

  1. เรียกใช้คำสั่งด้านล่างในบรรทัดคำสั่ง

sudo chown -R ec2-user:<usergroup> /app-path/public

คุณต้องระบุและใช้ "ผู้ใช้" และ "กลุ่มผู้ใช้" ที่ถูกต้องที่นี่


4

หากคุณใช้ Linux หรือ Mac คุณก็สามารถใช้งานssh terminalได้ คุณสามารถใช้เทอร์มินัลสำหรับเรียกใช้คำสั่งนี้

 php artisan cache:clear 
 sudo chmod -R 777 storage
 composer dump-autoload

หากคุณใช้ windows คุณสามารถใช้งานgit bashได้

 php artisan cache:clear 
 chmod -R 777 storage
 composer dump-autoload

คุณสามารถดาวน์โหลดแบบฟอร์มการคอมไพล์https://git-scm.com/downloads


3

Xampp สำหรับการใช้งาน:

cd /Applications/XAMPP/htdocs  
chmod -R 775 test/app/storage

1
คุณช่วยเพิ่มอีกนิดได้ไหม?
— Aaron Hall

ฉันใช้บทความนี้และฉันก็คือ: การตั้งค่า Laravel 4.x บน Mac OSX 10.8+ ด้วย XAMPP
— cristianojeda

3
chmod 777 มีความเสี่ยงด้านความปลอดภัย
— Yogesh Kamat

1
คุณสามารถใช้ chmod 775 นี้ได้
— cristianojeda

2

เมื่อใดก็ตามที่ฉันเปลี่ยน app.php ฉันได้รับอนุญาตปฏิเสธการเขียน bootstrap / cache / services.json ดังนั้นฉันจึงทำสิ่งนี้เพื่อแก้ไข:

chmod -R 777 bootstrap/cache/

8
chmod 777 มีความเสี่ยงด้านความปลอดภัย
— Yogesh Kamat


2

การตั้งค่าการอนุญาตเป็น 777 เป็นความคิดที่น่ากลัวอย่างแน่นอน!

... แต่

หากคุณได้รับข้อผิดพลาดเกี่ยวกับการอนุญาตเชื่อมต่อกับโฟลเดอร์ "ที่เก็บข้อมูล" นั่นเป็นสิ่งที่ฉันต้องทำ:

1) ตั้งค่า "พื้นที่เก็บข้อมูล" และสิทธิ์ของโฟลเดอร์ย่อยเป็น 777 ด้วย

sudo chmod -R 777 storage/

2) ในเบราว์เซอร์ไปที่หน้าหลัก laravel laravel / public / (laravel จะสร้างไฟล์หน่วยเก็บข้อมูลเริ่มต้นที่จำเป็น)

3) ส่งคืนการอนุญาต 775 อย่างปลอดภัยในการจัดเก็บและโฟลเดอร์ย่อย

sudo chmod -R 775 storage/

2

หากใช้ laradock ให้ลองใช้chown -R laradock:www-data ./storageคอนเทนเนอร์ของพื้นที่ทำงาน



0

หากคนอื่นพบปัญหาที่คล้ายกันกับข้อผิดพลาดสิทธิ์ fopen ไฟล์ แต่ก็ฉลาดพอที่จะไม่ chmod 777 สุ่มสี่สุ่มห้านี่คือคำแนะนำของฉัน

ตรวจสอบคำสั่งที่คุณใช้สำหรับสิทธิ์ที่ apache ต้องการ:

fopen('filepath/filename.pdf', 'r');

'r' หมายถึงเปิดให้อ่านอย่างเดียวและหากคุณไม่ได้แก้ไขไฟล์นี่คือสิ่งที่คุณควรตั้งไว้ นี่หมายความว่า apache / www-data ต้องการสิทธิ์ในการอ่านอย่างน้อยในไฟล์นั้นซึ่งหากไฟล์ถูกสร้างผ่าน laravel มันจะได้รับอนุญาตให้อ่านได้แล้ว

ถ้าด้วยเหตุผลใดก็ตามคุณต้องเขียนไฟล์:

fopen('filepath/filename.pdf', 'r+');

จากนั้นตรวจสอบให้แน่ใจว่า Apache มีสิทธิ์ในการเขียนไฟล์

http://php.net/manual/en/function.fopen.php


0

เพียงแค่เริ่มต้นเซิร์ฟเวอร์ของคุณโดยใช้ artisian

php artisian serve

จากนั้นเข้าถึงโครงการของคุณจาก URL ที่ระบุ:

ป้อนคำอธิบายรูปภาพที่นี่


0

ฉันมีปัญหาเดียวกันเมื่อใช้งานคนจรจัดใน Mac แก้ไขปัญหาโดยการเปลี่ยนผู้ใช้เซิร์ฟเวอร์ Apache ในไฟล์ https.conf:

# check user for php
[vagrant] ubuntu ~ $ php -i | grep USER
USER => ubuntu
$_SERVER['USER'] => ubuntu
[vagrant] ubuntu ~ $ 

เรียกใช้ apache ภายใต้ผู้ใช้ php แทน user daemon เพื่อแก้ไขปัญหาการเข้าถึงไฟล์ด้วย php

# change default apache user from daemon to php user
sudo sed -i 's/User daemon/User ubuntu/g' /opt/lampp/etc/httpd.conf
sudo sed -i 's/Group daemon/Group ubuntu/g' /opt/lampp/etc/httpd.conf

ตอนนี้ไฟล์แคช php ที่สร้างขึ้นสามารถอ่านและแก้ไขโดย apache โดยไม่แสดงข้อผิดพลาดสิทธิ์การเข้าถึง


0

หลังจากการทดลองใช้งานและข้อผิดพลาดมากมายกับการอนุญาตของไดเรกทอรีฉันลงเอยด้วย Epiphany ... ไม่มีพื้นที่เหลือบนพาร์ติชั่นของดิสก์ แค่อยากแบ่งปันเพื่อให้แน่ใจว่าไม่มีใครโง่พอที่จะมองหาทางออกในทิศทางที่ผิด

ใน Linux คุณสามารถใช้df -hเพื่อตรวจสอบขนาดดิสก์และพื้นที่ว่าง


0

ปัญหานี้เกิดขึ้นจริงจากผู้ใช้ที่ต้องการ write/readยื่นเอกสาร แต่ถูกปฏิเสธทำให้เกิดความเป็นเจ้าของที่แตกต่างกัน บางทีคุณอาจเป็น 'รูท' ที่ติดตั้ง laravel ไว้ก่อนหน้านั้นคุณลงชื่อเข้าใช้เว็บไซต์ของคุณในฐานะผู้ใช้ 'laravel' โดยที่ 'laravel' เป็นเจ้าของเริ่มต้นดังนั้นนี่เป็นปัญหาจริงที่นี่ ดังนั้นเมื่อผู้ใช้ 'laravel' ต้องการอ่าน / เขียนไฟล์ทั้งหมดในดิสก์เป็นค่าเริ่มต้นถูกปฏิเสธทำให้ไฟล์นั้นเป็นเจ้าของโดย 'root'

ในการแก้ปัญหานี้คุณสามารถปฏิบัติตามดังนี้:

sudo chown -hR your-user-name /root /nameforlder

หรือในกรณีของฉัน

sudo chown -hR igmcoid /root /sublaravel

เชิงอรรถ:

  1. root เป็นชื่อแรกที่ติดตั้งมาก่อน
  2. your-user-name เป็นเจ้าของเริ่มต้นที่จริง ๆ แล้วเขียน / อ่านในไซต์
  3. namefolder เป็นโฟลเดอร์ชื่อที่ต้องการให้คุณเปลี่ยนความเป็นเจ้าของ

0

ฉันพบข้อผิดพลาดเดียวกันในโครงการของฉัน ...
แต่พบว่าฉันลืมใส่enctypeในแบบฟอร์มของฉัน

<form method="#" action="#" enctype="multipart/form-data">

หวังว่าจะช่วยให้ที่ไหนสักแห่ง ...


0

ในขณะที่ทำงานกับ Windows 10 ด้วย Laragon และ Laravel 4 ดูเหมือนว่าฉันไม่มีทางที่จะเปลี่ยนการอนุญาตด้วยตนเองได้เนื่องจากการรันchmodคำสั่ง - คำสั่งใน Laragon-in-built-terminal นั้นไม่มีผลใด ๆ

อย่างไรก็ตามเป็นไปได้ที่เทอร์มินัลนี้จะไปที่โฟลเดอร์จัดเก็บข้อมูลและเพิ่มโฟลเดอร์ที่ต้องการเช่นนี้:

cd app/storage
mkdir cache
mkdir meta
mkdir views
mkdir sessions

cdคำสั่งใน terminal จะนำคุณไปยังโฟลเดอร์ (คุณอาจจำเป็นต้องปรับเปลี่ยนเส้นทางนี้เพื่อให้เหมาะกับโครงสร้างของไฟล์ของคุณ) mkdirคำสั่งจะสร้างไดเรกทอรีที่มีชื่อที่กำหนด

ฉันไม่ได้มีโอกาสทดสอบวิธีนี้ใน Laravel 5 แต่ฉันคาดหวังว่าวิธีการที่คล้ายกันควรใช้งานได้

แน่นอนอาจจะมีวิธีที่ดีกว่า แต่อย่างน้อยนี่เป็นวิธีแก้ปัญหาที่เหมาะสมกับสถานการณ์ของฉัน (การแก้ไขข้อผิดพลาด: file_put_contents(/var/www/html/laravel/app/storage/meta/services.json): failed to open stream)


-1
  1. ขั้นแรกให้ลบโฟลเดอร์หน่วยเก็บข้อมูลจากนั้นสร้างโฟลเดอร์หน่วยเก็บข้อมูลอีกครั้ง
  2. ภายในโฟลเดอร์หน่วยเก็บข้อมูลสร้างชื่อโฟลเดอร์ใหม่เป็นเฟรมเวิร์ก
  3. ภายในโฟลเดอร์เฟรมเวิร์กสร้างชื่อโฟลเดอร์สามโฟลเดอร์เป็นแคชเซสชันและมุมมอง

ฉันแก้ไขปัญหาด้วยการทำเช่นนี้แล้ว


-4

ฉันพยายามให้777สิทธิ์การเข้าถึงโฟลเดอร์จัดเก็บข้อมูลและมันก็ใช้ได้สำหรับฉัน

1) ไปที่ไดเรกทอรีราก laravel ของคุณ ( /var/www/htmlสำหรับฉัน) และเรียกใช้คำสั่งต่อไปนี้

chmod 777 -R storage

2
อย่าตั้งค่าการอนุญาตเป็น 777 เนื่องจากจะทำให้ dir มองเห็นและแก้ไขได้สำหรับทุกคนที่สามารถดู dir ไม่แนะนำ!
— CodeNinja
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.