【问题标题】:Executed PHP Script Cannot Access GCS Mounted Drive on GCE执行的 PHP 脚本无法访问 GCE 上的 GCS 安装驱动器
【发布时间】:2016-07-26 20:08:43
【问题描述】:

我可以使用下面的命令行挂载我的 Google Cloud Storage:

gcsfuse -o allow_other -file-mode=660 -dir-mode=770 --uid=<uid> --gid=<gid> testbucket /path/to/domain/folder

该组包括用户 apache。 Apache 能够像这样写入已安装的驱动器:

sudo -u apache echo 'Some Test Text' > /path/to/domain/folder/hello.txt

hello.txt 按预期出现在存储桶中。但是,当我执行以下 php 脚本时,出现错误:

<?php file_put_contents('/path/to/domain/folder/hello.txt', 'Some Test Text');

PHP 错误:无法打开流:权限被拒绝

echo exec('whoami'); 返回 apache

我认为这是使用 gcsfuse 或类似的东西进行安装的常见用途,但我似乎是互联网上唯一遇到此问题的人。不知道是我挂载方式的问题还是httpd的服务安全问题。

【问题讨论】:

  • 这里有很多活动部件。你能在没有 PHP 甚至 Apache 的情况下重现问题吗?那会有很大帮助。如果做不到这一点,也许您可​​以使用strace 来准确查看 PHP 导致失败的系统调用。

标签: google-cloud-storage google-compute-engine gcsfuse


【解决方案1】:

我遇到了类似的问题。

在使用 gcsfuse 挂载 Google Storage 存储桶时使用标志 --implicit-dirs。更多关于这个here

将存储桶安装为文件夹会使操作系统将其视为可能包含文件和文件夹的常规文件夹。但是 Google Cloud Storage 存储桶没有目录结构。例如,当您在 Google 存储桶内名为 files 的文件夹中创建名为 hello.txt 的文件时,您实际上并没有创建文件夹并将文件放入其中。该对象在存储桶中创建,名称为files/hello.txt。更多关于 herehere.

要使操作系统将 GCS 存储桶视为分层结构,您必须为 gcsfuse 指定 --implicit-dirs 标志。

注意: 我不建议在生产系统中使用 gcsfuse,因为它是一个 beta 质量的软件。

【讨论】:

  • 我确实看到了文件夹的行为差异,但不幸的是,这并没有解决我的问题。我仍然无法使用 PHP 保存文件。我将改用 API。感谢您的帮助!
猜你喜欢
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 2012-09-16
相关资源
最近更新 更多