ผู้แต่ง: file_put_contents (./ composer.json): ล้มเหลวในการเปิดสตรีม: การอนุญาตถูกปฏิเสธ


96

ฉันกำลังพยายามติดตั้งPrestissimoไปยังเซิร์ฟเวอร์ Ubuntu 16.04 แต่นั่นทำให้เกิดข้อผิดพลาด:

$ composer global require "hirak/prestissimo:^0.3"
Changed current directory to /home/kramer65/.composer


  [ErrorException]
  file_put_contents(./composer.json): failed to open stream: Permission denied


require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--] [<packages>]...

ฉันลงชื่อเข้าใช้ในฐานะผู้ใช้kramer65ดังนั้นฉันจึงไม่รู้ว่าทำไมจึงไม่สามารถเขียนลงในโฟลเดอร์บ้านได้ ปฏิกิริยาปกติของฉันต่อ a permission deniedคือการใช้sudoแต่ผู้แต่งมักจะพูดว่า:

อย่าเรียกใช้ Composer ในฐานะผู้ใช้ root / super! ดูรายละเอียดhttps://getcomposer.org/root

มีความคิดอย่างไรที่ฉันจะแก้ปัญหานี้ได้


1
อาจจะชัดเจน แต่ต้องถามว่า ... สิทธิ์ปัจจุบันของคุณcomposer.jsonคืออะไร?
TheGentleman

@GentlemanMax - ยังไม่มี~/.composer/composer.jsonไฟล์
kramer65

สิทธิ์ใน~/.composer/โฟลเดอร์คืออะไร? kramer65ไม่มีสิทธิ์เขียนดูเหมือนว่า a chmodอาจมีประโยชน์
AnthonyB

@AnthonyB - ใช่ฉันตอนนี้ดูเป็นเจ้าของโดย~/.composer/ rootแต่ฉันเพิ่งตรวจสอบระบบอื่น ๆ และติดตั้งคอมโพสิตบน Ubuntu 16.04 VM ใหม่และเป็นของroot. ฉันสามารถของหลักสูตรchmodหรือchownมัน แต่มันเป็นความคิดที่ดีที่จะเปลี่ยนพฤติกรรมเริ่มต้นนี้หรือไม่?
kramer65

ฉันเพิ่งตรวจสอบบน Ubuntu 16.04 ของฉัน composer เป็นของรูทพร้อม755โหมด ดังนั้นการเปลี่ยนเจ้าของอาจไม่ใช่ทางออก
AnthonyB

คำตอบ:


253

ฉันมีปัญหาในการติดตั้ง laravel / lumen นี้

สามารถแก้ไขได้ด้วยคำสั่งต่อไปนี้:

$ sudo chown -R $USER ~/.composer/

1
สิ่งนี้ใช้ได้กับฉันในการติดตั้งปลั๊กอินสินทรัพย์ทั่วโลกของนักแต่งเพลง yii2 ขอบคุณ samuel
Geoff

3
การใช้ $ USER แทน 'myuser' เป็นตัวเลือกที่ดีกว่า
zennin

2
มันไม่สามารถแก้ปัญหาให้ฉันได้แปลก เคล็ดลับอื่น ๆ ?
mylord

2
@mylord ตรวจสอบให้แน่ใจว่า. composer มาจากผู้ใช้ของคุณ ลองวิ่งด้วย~/.composer
Samuel Martins

6
นี่คือเคล็ดลับดีๆ อย่างไรก็ตามหากคุณได้สร้างโครงการของคุณแล้วให้รัน sudo chown -R $ USER my_project
Daniel

16

ในการแก้ไขปัญหานี้คุณควรเปิดหน้าต่างเทอร์มินัลแล้วพิมพ์คำสั่งนี้:

sudo chown -R user ~/.composer(ด้วยuserการเป็นผู้ใช้ปัจจุบันของคุณในกรณีของคุณkramer65)

หลังจากที่คุณรันคำสั่งนี้คุณควรมีสิทธิ์ในการรันคำสั่ง global require ของนักแต่งเพลง

คุณอาจต้องลบไฟล์. composer ออกจากไดเร็กทอรีปัจจุบันเพื่อเปิดหน้าต่างเทอร์มินัลแล้วพิมพ์คำสั่งนี้:

sudo rm -rf .composer


3

ในกรณีของฉัน.composerเป็นเจ้าของโดยรูทดังนั้นฉันจึงทำsudo rm -fr .composerแล้วทั่วโลกต้องการใช้งานได้

ขอเตือน! คุณไม่ต้องการใช้คำสั่งนั้นหากคุณไม่แน่ใจว่ากำลังทำอะไรอยู่


3

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


2

ในกรณีของฉันฉันไม่มีปัญหากับ~/.composer.
ดังนั้นการอยู่ในโฟลเดอร์รูทของแอป Laravel ฉันทำได้sudo chown -R $USER composer.lockและมันก็มีประโยชน์


1

นี่อาจเป็นกรณีที่ล้ำหน้า แต่ถ้าคุณใช้ Travis CI และใช้ประโยชน์จากการแคชคุณอาจต้องการล้างแคชทั้งหมดและลองอีกครั้ง

แก้ไขปัญหาของฉันเมื่อฉันเปลี่ยนจาก sudo เป็น non sudo builds


0

ฉันได้รับข้อยกเว้นเดียวกัน แต่ในกรณีของฉันฉันใช้ PowerShell เพื่อเรียกใช้คำสั่งดังนั้นฉันจึงแก้ไขสิ่งนี้ด้วยคำแนะนำในการปลดบล็อกหลายไฟล์ก่อน PS C:\> dir C:\executable_file_Path\*PowerShell* | Unblock-File จากนั้นใช้สิ่งต่อไปนี้เพื่อโหลดแพ็คเกจ & 'C:\path_to_executable\php.exe' "c:\path_to_composer_.phar_file\composer.phar "require desired/package


0

ในกรณีของฉันฉันเคยsudo mkdir projectFolderสร้างโฟลเดอร์ มันเป็นของผู้ใช้รูทและฉันเข้าสู่ระบบโดยใช้ผู้ใช้ที่ไม่ใช่รูท

ดังนั้นฉันจึงเปลี่ยนสิทธิ์โฟลเดอร์โดยใช้คำสั่งsudo chown mynonrootuser:mynonrootuser projectFolderแล้วมันก็ใช้ได้ดี

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