无法使用 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 shell_exec() 执行 telnet 命令
如果使用 python 和子进程从 pycharm 调用 gsutil 不起作用,“无法导入名称 _common”