Приложение GAE PHP: Невозможно найти упаковщик "gs" - PullRequest
1 голос
/ 12 июня 2019

Я пишу очень простой код в стандартном php73 движке Google App, следуя документации, приведенной здесь: https://cloud.google.com/appengine/docs/standard/php/googlestorage/ и https://cloud.google.com/appengine/docs/standard/php/googlestorage/setup

php.ini (не требуется согласно документации для этого сценария, но на всякий случай)

google_app_engine.allow_include_gs_buckets = "#default#"

index.php:

file_put_contents("gs://#default#/hello.txt", "some text");

и получение следующей ошибки от Google App Engine

file_put_contents(): Unable to find the wrapper "gs" - did you forget to enable it when you configured PHP?

Насколько я вижу из документации, никакой другой конфигурации не требуется, поскольку GAE автоматически регистрирует оболочку файлового потока в своей среде.

Что мне не хватает? Спасибо!

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Получается, что документация относится к среде PHP 5, а не к PHP 7 (хотя это не указано). Способ заставить это работать в PHP 7 описан здесь:

https://github.com/GoogleCloudPlatform/php-docs-samples/tree/master/appengine/php72/storage/src

Я только что сделал это:

use Google\Cloud\Storage\StorageClient; 
function register_stream_wrapper($projectId) {   
    $client = new StorageClient(['projectId' => $projectId]);
    $client->registerStreamWrapper();
}
register_stream_wrapper("projectId");

чтобы зарегистрировать упаковщик.

0 голосов
/ 12 июня 2019

Приложение App Engine, вы не можете записать в файловую систему, где ваше приложение развернуто.Ваше приложение может читать любые файлы из развернутой структуры каталогов, но не может записывать в эту файловую систему.Вместо этого приложение может использовать Google Cloud Storage (GCS) как для чтения, так и для записи файлов.

Измените пути файлов некоторых приложений, чтобы они указывали на корзину GCS в вашем облачном проекте. Измените формы загрузки файлов приложения, чтобы они использовали GCSдля получения выгруженных файлов

При желании вы можете читать статические файлы, загруженные вместе с вашим приложением, используя функции файловой системы PHP, такие как file_get_contents.

$ fileContents = file_get_contents ($ filePath);

где указанный путь должен быть путем относительно скрипта, который обращается к ним.

Вы должны выгрузить файл или файлы в подкаталоге приложения при развертывании приложения в App Engine и настроить файл app.yaml так, чтобываше приложение может получить доступ к этим файлам.Для получения полной информации см. Конфигурация приложения PHP с app.yaml.

https://cloud.google.com/appengine/docs/standard/php/googlestorage/

В конфигурации app.yaml обратите внимание, что если вы используете статический обработчик файлов или каталогов (static_files или static_dir)) вы должны указать для application_readable значение true, иначе ваше приложение не сможет читать файлы.Однако, если файлы обслуживаются обработчиком сценариев, в этом нет необходимости, поскольку эти файлы по умолчанию читаются обработчиками сценариев.

Второй вариант - запустить приложение за пределами App Engine.API XML и JSON.Документация, библиотеки и пример приложения доступны на веб-сайте разработчика GCS.

...