【问题标题】:Set user permissions | Artisan command will not run in code but works fine on command line设置用户权限 | Artisan 命令不会在代码中运行,但在命令行上可以正常工作
【发布时间】:2015-01-20 08:48:15
【问题描述】:

我有一个本质上是运行 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 上尝试这个。在我的本地开发机器上一切正常。

知道有什么问题吗?

【问题讨论】:

  • 听起来像是权限问题。当您执行命令时,HTTP 服务器通常以www-data 运行,您以目录所有者身份登录。因此,您可以创建文件。

标签: php laravel laravel-4 permissions


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    sudo chown -R &lt;YOUR_USERNAME&gt;:www-data &lt;THE_DIRECTORY&gt;

    【讨论】:

    • 有什么替代方案吗?我想保持两个环境中的代码准确无误,我必须每次都通过 ssh 进入我的 droplet 并运行它。
    • 不,您只需为您拥有的每台机器运行一次。习惯做这样的事情。
    • 我对 DevOps 的东西不太熟悉...收到 chmod: invalid mode: ‘forge:www-data’ 错误。
    • 你在 bash shell 中吗?它是一台实际的机器还是你和你的机器之间有代理?我不熟悉“伪造”。
    • 是的,我现在在 bash shell 中,可以通过 ssh 访问我的服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    相关资源
    最近更新 更多