在计算引擎上从 PHP 的 exec() 调用时,gsutil 不起作用

Posted

技术标签:

【中文标题】在计算引擎上从 PHP 的 exec() 调用时,gsutil 不起作用【英文标题】:gsutil does not work when called from exec() from PHP on a compute engine 【发布时间】:2018-05-27 17:43:56 【问题描述】:

我们正在尝试通过 php 在 Google 计算引擎上运行 gsutil 命令,但没有得到任何结果。

当通过 SSH 运行 gsutil 时,它工作正常,但是当从 PHP exec() 运行时,没有任何反应。

exec() 不会返回任何错误。

有什么想法吗?

【问题讨论】:

我们的 php 在 nginx 用户下运行,但 gsutil 似乎只对 root 有效,有什么办法可以改变吗? 【参考方案1】:

我猜你没有看到任何输出,因为 exec() 没有捕获标准错误。

我也猜想您遇到了https://github.com/GoogleCloudPlatform/gsutil/issues/419 中提到的类似问题。如果您没有设置 BOTO_CONFIG 环境变量,gsutil 会在调用它的用户的主目录中搜索一个 boto 配置文件(其中包含您的凭据)。 nginx 用户通常没有主目录,因此您必须将您的 boto 文件存储在其他位置,并使用该文件的路径设置 BOTO_CONFIG。如果您将 gsutil 配置为 root,则该 boto 文件将位于根目录下的某个位置(~/.boto~/.config/gcloud/legacy_credentials/...,如果作为 Cloud SDK 的一部分安装)。

【讨论】:

感谢您的回复,我们将立即尝试。同时我们在应用引擎柔性环境上尝试了同样的事情,它仍然没有工作,并且我们无法访问用户和配置。当我们首先尝试计算引擎时我会回复消息。 我们必须导出 PATH 和 HOME,然后 gsutil 开始在计算引擎上工作!现在在应用引擎上尝试同样的方法,仍然没有运气。 当我们通过 SSH 连接到应用引擎的实例时,有 gsutil,但是当我们从代码中运行它时,它会显示“权限被拒绝”,因为我们为它设置了正确的路径。

以上是关于在计算引擎上从 PHP 的 exec() 调用时,gsutil 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

golang 使用twig模板引擎,站在php的肩膀上!

在linux上调用php exec函数

PHP中调用外部命令的方法

php的ssh2_exec()函数不能正常使用?

PHP中的异步shell exec

在 OS X 上从源代码构建 PHP 5.2.10 时链接 libresolv 时出错