我正在按照以下文档在标准 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会在其环境中自动注册文件流包装器。
我想念什么?谢谢!
答案 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开发人员网站上提供了文档,库和示例应用程序。