执行的PHP脚本无法访问GCE上的GCS Mounted Drive

时间:2016-07-26 20:08:43

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

我可以使用以下命令行安装Google云端存储:

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。

的服务安全性有关

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题。

使用gcsfuse安装Google存储桶时使用标记--implicit-dirs。有关here的更多信息。

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

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

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