ChatGPT解决这个技术问题 Extra ChatGPT

Composer: file_put_contents(./composer.json): failed to open stream: Permission denied

I'm trying to install Prestissimo to an Ubuntu 16.04 server, but that leads to an error:

$ 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>]...

I'm logged in as user kramer65, so I wouldn't know why it can't write to my home folder. My normal reaction to a permission denied is to use sudo, but composer then always says:

Do not run Composer as root/super user! See https://getcomposer.org/root for details

Any idea how I can solve this?

May be obvious, but must be asked...what are the current permissions on your composer.json?
@GentlemanMax - There is no ~/.composer/composer.json file yet.
So what are the permissions on ~/.composer/ folder? kramer65 has no right to write it seems, a chmod could be useful.
@AnthonyB - Yes, I now see ~/.composer/ is owned by root. But I just checked on some other systems and installed composer on a fresh new Ubuntu 16.04 VM, and it is always owned by root. I can of course chmod or chown it , but is it a good idea to change this default behaviour?
Not totally related, but I wouldn't install Prestissimo on a production server. It's compatibility with newer versions of Composer might require updates that you probably don't want to deal with in production.

S
Samuel Martins

I had this problem to install laravel/lumen.

It can be resolved with the following command:

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

THis also worked for me in yii2 installation of composer global asset plugin thanks samuel
Using $USER instead of 'myuser' is better option.
It didn't fix the problem for me, strange. Any other tips?
@mylord Make sure that the .composer is from your user. Try run with ~/.composer
This is a good tip. However if you have already created your project run sudo chown -R $USER my_project
K
Ken

To resolve this, you should open up a terminal window and type this command:

sudo chown -R user ~/.composer (with user being your current user, in your case, kramer65)

After you have ran this command, you should have permission to run your composer global require command.

You may also need to remove the .composer file from the current directory, to do this open up a terminal window and type this command:

sudo rm -rf .composer


J
Jonathan

For me, in Ubuntu 18.04. I needed to chown inside ~/.config/composer/

E.g.

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

Then global commands work.


T
Tarasovych

In my case I don't have issues with ~/.composer.
So being inside Laravel app root folder, I did sudo chown -R $USER composer.lock and it was helpful.


N
Nabil Kadimi

In my case, .composer was owned by root, so I did sudo rm -fr .composer and then my global require worked.

Be warned! You don't wanna use that command if you are not sure what you are doing.


Y
Yasin Okumuş

I faced this issue as well but in my case, I was in wrong directory. Check the directory you are working


J
Jason

In my case all the permissions were correct at all the locations manetioned in other answers here, but I was still getting this error.

Turned out there were some vendor directories that were owned by root. Composer writes composer.lock files all over the place when it's doing an update or install.

So solving my case - and this is specifically for a laravel sail container - all ownerships were switched to user sail in the project:

Enter the sail container as root:

vendor/bin/sail root-shell

Set the file ownership for all files in the project:

chown -R sail:sail /var/www/html

You may just want to do the vendor directory only as a first try:

chown -R sail:sail /var/www/html/vendor

The ownership was wrong after switching from a hand-rolled docker-compose.yaml setup to Laravel Sail, which IMO handles file ownership and permissions in a sensible way, separating root from the application user sail.


M
Moak

This might be super edge case, but if you are using Travis CI and taking advantage of caching, you might want to clear all cache and retry.

Fixed my issue when I was going from sudo to non sudo builds.


j
javierfmv

I was getting the same exception, but in my case I am using PowerShell to run commands So, I fixed this with an instruction to unblock multiple files first. PS C:\> dir C:\executable_file_Path\*PowerShell* | Unblock-File and then use the following to load the package & 'C:\path_to_executable\php.exe' "c:\path_to_composer_.phar_file\composer.phar "require desired/package


w
wp student

In my case I used sudo mkdir projectFolder to create folder. It was owned by root user and I was logged in using non root user.

So I changed the folder permission using command sudo chown mynonrootuser:mynonrootuser projectFolder and then it worked fine.


B
Basant Mandal - Kitto

I was getting the same error when using it with WSL Windows 10. I used the following command to solve it:-

sudo chown -R $USER  /home/<username>/.config/composer

g
ganji

I had same issue in windows version of composer that has installed in

C:\composer

When I was trying this command

C:\composer require aws/aws-sdk-php

then simply I got into composer installed folder and try it again

C:\composer>composer require aws/aws-sdk-php

the package installed quickly .


关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now