无法使用 PHP exec 运行 gsutil

Posted

技术标签:

【中文标题】无法使用 PHP exec 运行 gsutil【英文标题】:Can't use PHP exec to run gsutil 【发布时间】:2020-05-07 20:31:51 【问题描述】:

出于特定原因,我需要运行 php exec() 从我的存储桶中获取某些信息。为此,我在我的本地机器和生产服务器上都按照the documentation 安装了 gsutil。虽然在我的本地机器上效果很好,但我不知道为什么它不能在生产环境中运行。 问题是,在我的服务器上使用 SSH 时,我可以使用 gsutil 来获取我不需要的数据。它与身份验证无关,因为我的存储桶当前配置为公共(并且我没有在本地计算机上登录)。

在解决这个问题时,我发现 www-data(linux 用户)无权访问 /root/.config/gcloud,并且我找不到方法 a) 更改文件夹位置或 b) 为 www-data 设置该文件夹的权限(虽然 chmod/chown 有效,但不会更改输出)。

两台机器都运行 Ubuntu,本地使用 19.10,服务器使用 18.04

感谢任何帮助!

【问题讨论】:

显示您正在开始gsutil。请记住,它是一个脚本,因此需要启动一个 shell 才能运行它。 您能详细说明您的问题吗?您在生产服务器上遇到什么错误?如果您提供更多详细信息,可能会很容易为您提供帮助。 @SamuelRomero 好吧,exec() 什么也不返回,错误代码是 1。当我运行sudo -u www-data gsutil 时,它返回this。 @JohnHanley 抱歉,我无法理解您的建议。我正在尝试运行 exec("gsutil dosomething") ,它适用于我的本地测试版本 gsutil 不是程序(可执行文件)。它是批处理或 shell 脚本,具体取决于操作系统。 【参考方案1】:

尝试使用完整路径运行 gsutil,可能 gsutil 已安装到您的 /home/$USER/gsutil,您可以将文件夹复制到 /var/www 然后打开 www-data 用户的权限并像这样运行 exec

exec('python3 /var/www/gsutil/gsutil.py 2>&1', $output, $err);

【讨论】:

以上是关于无法使用 PHP exec 运行 gsutil的主要内容,如果未能解决你的问题,请参考以下文章

PHP 警告:exec() 无法分叉

无法使用 PHP shell_exec() 执行 telnet 命令

php curl_exec无法返回结果

如果使用 python 和子进程从 pycharm 调用 gsutil 不起作用,“无法导入名称 _common”

gsutil cp 管道在 docker 容器中作为 bash exec 命令失败

无法在 Ubuntu 上设置 gsutil,Android 应用程序的项目编号在哪里?