【问题标题】:laravel controller shell_exec('composer update');laravel 控制器 shell_exec('composer update');
【发布时间】:2018-01-26 21:39:56
【问题描述】:

我想在 laravel 的控制器中执行以下命令:composer update,但是这个命令不起作用。 另一方面,composer info 命令完美运行。

当我在命令提示符中执行 composer update 时,我的所有依赖项都在 laravel 供应商文件中正确更新,但是当我尝试在我的控制器中执行 composer update 时,没有任何反应。

这是我的代码:

$data['output'] = shell_exec( 'cd '. base_path() .' && composer update' );
dd($data);

结果如下:

array:1 [▼
  "output" => null
]

您能帮我理解为什么composer update 在控制器中不起作用吗? 我想在没有命令提示符的情况下更新控制器中的依赖项。

谢谢。

【问题讨论】:

  • “不起作用”不是一个好的描述。什么不起作用?有什么错误吗?
  • shell_exec 是否返回 null?
  • 是的,抱歉,由于我的描述不佳,shell_exec 返回“输出”=> null
  • CLI 中的用户很可能与通过网络服务器执行代码的用户不同。在正确的情况下,这也可能是一个想法的绝对灾难......
  • 好的,谢谢,我想制作一个界面,以便网站管理员可以轻松安装软件包。他只需要提供这样的信息:SSH 链接 -> git@bitbucket.org:xxxxx/xxxxxx.git 和安装版本 -> "xxxxx/xxxxxx": "0.1.*"。并且 Web 应用程序必须自己更新 composer.json 和 conf/app.php 文件,然后执行命令composer update。但是,可能无法在控制器中运行“composer update”命令(作为预防措施)。你怎么看?

标签: php laravel controller composer-php shell-exec


【解决方案1】:

来自shell_exec() 的 php 文档:

The output from the executed command or NULL if an error occurred or the command produces no output.

听起来你最好改用passthru(),因为这会给你错误的输出。

说到错误,这个想法听起来像是一场彻底的灾难。

【讨论】:

  • 感谢您的回答。我知道这不是一个好主意(如果您知道从 git 安装软件包的另一种方法,我很感兴趣,谢谢)。但是,根据您的回答,我得到了相同的结果,我想我会尝试分 3 步安装我的依赖项,第一个 将自动配置我的文件 composer.json 和 config/app.php,第二个是手动运行命令composer update最后第三个会自动替换composer.lock 文件并自动执行命令composer install --no-dev。有点像这里link。
  • 您也可以尝试将输出通过管道传输到文件(例如exec('composer update > output.txt'))并尝试找到该文件。这应该(希望)至少让你看到作曲家的输出。我想不出允许用户安装作曲家包的好方法。我强烈建议您至少在单个软件包上进行安装,并且从不在生产环境中运行 composer update。
猜你喜欢
  • 2016-07-21
  • 2015-05-23
  • 2015-01-07
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 2017-03-05
  • 1970-01-01
相关资源
最近更新 更多