GAE PHP应用程序:无法找到包装“ gs”

时间:2019-06-12 13:57:51

标签: php google-app-engine google-cloud-platform google-cloud-storage

我正在按照以下文档在标准 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 个答案:

答案 0 :(得分:1)

因此,事实证明该文档适用于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");

注册包装器。

答案 1 :(得分:0)

在App Engine应用程序中,您无法写入已部署应用程序的文件系统。您的应用程序可以从已部署的目录结构中读取任何文件,但无法写入该文件系统。相反,该应用程序可以使用Google Cloud Storage(GCS)读取和写入文件。

修改一些应用程序文件路径,以指向您的Cloud Project中的GCS存储桶 修改应用程序文件上传表单,以便他们使用GCS接收上传的文件

您可以选择使用PHP文件系统功能(例如file_get_contents)读取随应用程序上传的静态文件。

$ fileContents = file_get_contents($ filePath);

其中指定的路径必须是相对于访问它们的脚本的路径。

在将应用程序部署到App Engine时,您必须上载一个或多个应用程序子目录中的文件,并且必须配置app.yaml文件,以便您的应用程序可以访问这些文件。有关完整详细信息,请参阅带有app.yaml的PHP应用程序配置。

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

在app.yaml配置中,请注意,如果您使用静态文件或目录处理程序(static_files或static_dir),则必须将application_ready设置为true,否则您的应用程序将无法读取文件。但是,如果文件由脚本处理程序提供,则没有必要,因为默认情况下脚本处理程序可以读取这些文件。

第二个选项是在App Engine之外运行您的应用程序,Google提供了XML和JSON API。 GCS开发人员网站上提供了文档,库和示例应用程序。