在计算引擎上从 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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章