1

我可以使用下面的命令行挂载我的 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');返回阿帕奇

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

4

1 回答 1

1

我遇到了类似的问题。

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

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

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

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

于 2016-07-27T12:47:51.683 回答