2016-07-26 7 views
0

konnte ich meine Google Cloud Storage mit der Befehlszeile unten montieren:Ausgeführt PHP-Skript kann nicht GCS Zugriff Mounted Drive auf GCE

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

Die Gruppe der Benutzer Apache enthält. Apache kann in das bereitgestelltes Laufwerk schreiben, wie so:

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

hello.txt auf dem heißen Stein erscheint wie erwartet. Allerdings, wenn ich die unten PHP-Skript ausführen bekomme ich einen Fehler:

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

PHP-Fehler: failed to open stream: Permission verweigert

echo exec('whoami'); Returns Apache

ich dies angenommen ist eine allgemeine Verwendung für die Montage mit GCSFUSE oder etwas ähnliches, aber ich bin anscheinend der einzige im Internet mit diesem Problem. Ich weiß nicht, ob es ein Problem mit der Art und Weise, wie ich es gemountet habe, oder der Dienstsicherheit von httpd ist.

+0

Hier sind viele bewegliche Teile. Können Sie das Problem ohne PHP oder sogar Apache reproduzieren? Das würde sehr helfen. Wenn Sie dies nicht tun, können Sie vielleicht 'strace' verwenden, um genau zu sehen, welche Systemaufrufe PHP scheitert. – jacobsa

Antwort

0

Ich stieß auf ein ähnliches Problem.

Verwenden Sie die Flagge --implicit-dirs, während Sie den Google Storage-Bucket mit gcsfuse installieren. Mehr dazu here.

Wenn Sie den Bucket als Ordner anhängen, wird das Betriebssystem wie ein normaler Ordner behandelt, der Dateien und Ordner enthalten kann. Der Google Cloud Storage-Bucket verfügt jedoch nicht über Verzeichnisstrukturen. Wenn Sie beispielsweise eine Datei mit dem Namen hello.txt in einem Ordner mit dem Namen files in einem Google Storage-Bucket erstellen, erstellen Sie keinen Ordner und legen die Datei darin ab. Das Objekt wird im Bucket mit dem Namen files/hello.txt erstellt. Mehr dazu here und here.

Damit das Betriebssystem den GCS-Bucket wie eine hierarchische Struktur behandelt, müssen Sie das Flag --implicit-dirs für die gcsfuse angeben.

Hinweis: Ich würde mit gcsfuse in Produktionssystemen nicht empfehlen, da es eine Beta-Qualität Software.

+0

Ich sehe den Unterschied im Verhalten mit den Ordnern, aber das hat das Problem leider nicht behoben. Ich kann immer noch keine Dateien mit PHP speichern. Ich werde stattdessen die API verwenden. Danke für Ihre Hilfe! – Syclone