设置用户权限 |工匠命令不会在代码中运行,但在命令行上工作正常


Set user permissions | Artisan command will not run in code but works fine on command line

我有一个路由,本质上是一个运行 Artisan 命令的"钩子",它接受一些get参数作为参数:

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

myCommand只是在根目录中创建一个名为 param 的目录和hello.txt文件。

我可以使用php artisan myCommand param1运行myCommand并且可以按预期工作。我还可以使用 Artisan 的 tinker 命令并完美地运行Artisan::call()

但是,当我通过访问 URL 尝试该命令时(例如 example.com/hook&param=hello ),我的命令没有按预期创建任何内容。如果它也有帮助,我正在Laravel Forge上尝试这个。在我的本地开发机器上,一切正常。

知道出了什么问题吗?

您可以通过以下方式设置文件夹的权限

chmod 777 -R /path/to/folder

你绝对不应该做的事情,因为每个人都可以在之后编写和执行这个目录中的所有内容

或者,我更喜欢的是,您创建一个新组,我们称之为用户组:

sudo groupadd usergroup

现在,该组已存在,请将两个用户添加到其中:

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

现在剩下的就是设置目录的权限:

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

现在,只有用户组的成员才能读取、写入或执行目录中的文件和文件夹。请注意 chmodchgrp 命令的 -R 参数:这告诉它们递归到目标目录的每个子目录并修改每个可用的文件和目录。

如果您希望其他人能够读取文件,您可能还希望将 770 更改为类似 774 的内容,如果您希望其他人读取和执行文件,则更改为 775 等。在用户注销并重新登录之前,组分配更改不会生效。

在您的情况下,您绝对应该在之后将其更改为 775......

您需要正确设置目录权限。

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