Set user permissions | Artisan command will not ru

2019-01-12 13:09发布

问题:

I have a route that is essentially a "hook" to run an Artisan command, it accepts some get parameters as arguments:

Route::get('hook', function()
{
  $param = Input::get('param');
  Artisan::call('myCommand', array('param' => $param));
}

myCommand simply creates a directory in the root called param and a hello.txt file.

I can run myCommand fine using php artisan myCommand param1 and it works as expected. I can also use Artisan's tinker command and run Artisan::call() perfectly fine too.

However when I try the command via visiting the URL (e.g. example.com/hook&param=hello), my command does not create anything as expected. If it helps as well, I'm trying this on Laravel Forge. On my local dev machine everything works fine.

Any idea what is wrong?

回答1:

You can either set permissions to the folder by

chmod 777 -R /path/to/folder

what you absolutely shouldn't do, as everybody can write and execute everything in this directory afterwards

or, what I would prefer, you create a new group, let's call it usergroup:

sudo groupadd usergroup

Now that the group exists, add the two users to it:

sudo usermod -a -G usergroup <your username>
sudo usermod -a -G usergroup www-data

Now all that's left is to set the permissions on the directory:

sudo chgrp -R usergroup /path/to/the/directory
sudo chmod -R 770 /path/to/the/directory     // <<<<<< change this to 775

Now only members of the usergroup group can read, write, or execute files and folders within the directory. Note the -R argument to the chmod and chgrp commands: this tells them to recurse into every sub directory of the target directory and modify every file and directory available.

You may also want to change 770 to something like 774 if you want others to be able to read the files, 775 if you want others to read and execute the files, etc. Group assignment changes won't take effect until the users log out and back in.

In your case, you should definately change it to 775 afterwards...



回答2:

You need to set up directory permissions correctly.

sudo chown -R <YOUR_USERNAME>:www-data <THE_DIRECTORY>