读写文件

在 Google App Engine PHP 5 标准环境中,部署应用的本地文件系统不可写。此行为可确保应用的安全性和可扩展性。

但是,如果您的应用需要在运行时读写文件,则您可以使用 PHP 5 标准环境提供的内置 Google Cloud Storage 流封装容器并利用许多标准 PHP 文件系统函数来读写文件。

您可以通过两种方法向 Google Cloud Storage 写入文件:

  • 从应用写入文件
    • 简单的文件写入
    • 流文件写入
  • 让用户将文件上传到 Google Cloud Storage

从应用写入文件

如果您从应用写入文件,则可以一次写入整个文件,也可以流的方式写入文件。

适用于 Cloud Storage 的 App Engine 流封装容器内置于运行时,并在您提供以 gs:// 开头的文件名时使用。该封装容器要求存储分区或文件对象的名称采用以下形式:

gs://bucket_name/desired_object_name

简单的文件写入

利用使用有效 Cloud Storage 网址的 file_put_contents,可从应用将数据写入 Google Cloud Storage。例如:

file_put_contents("gs://${my_bucket}/hello.txt", $newFileContent);

其中 my_bucket正确配置的 Google Cloud Storage 存储分区

或者,如果要使用流选项提供权限、缓存和/或元数据选项,则可以按如下所示的方式写入文件:

$options = ['gs' => ['Content-Type' => 'text/plain']];
$context = stream_context_create($options);
file_put_contents("gs://${my_bucket}/hello_options.txt", $newFileContent, 0, $context);

流文件写入

或者,您也可以使用 fopen/fwrite 以流的方式写入数据:

$fp = fopen("gs://${my_bucket}/hello_stream.txt", 'w');
fwrite($fp, $newFileContent);
fclose($fp);

请注意,使用流时,数据将以较小数据块的形式刷新到 Google Cloud Storage。 您事先无需知道要写入的数据的总长度:系统会在文件资源关闭后计算总长度:

以上就是写入文件的基本方法。要了解特殊用例和更高级的文件管理,请参阅下一步做什么下列出的主题。

删除文件

如果要删除文件本身,请使用 PHP unlink() 函数。

用户上传

要详细了解此文件写入选项,请参阅允许用户上传文件

读取文件

要了解如何从 Google Cloud Storage 读取文件,请参阅提供文件的公开访问权限

设置和要求

您需要激活 Google Cloud Storage 并创建存储分区。如需了解详情,请参阅设置

支持的 PHP 5 文件系统函数

系统支持很多常用的 PHP 5 文件函数,以及文件信息和目录函数。如需受支持的 PHP 函数的完整列表,请参阅 PHP 5 文件系统函数支持

Cloud Storage Tools API 提供的扩展功能

Google Cloud Storage 流封装容器可让您使用 PHP 文件系统调用。但是,您可能需要使用扩展功能,才能获取 Google Cloud Storage 的最佳使用效果。Cloud Storage Tools API 中提供了以下扩展功能:

此 API 提供了一组支持传送文件和图片的函数,以及其他有用的实用工具。我们将在其他主题页面中介绍其中的多个功能。

可以通过其他方式读写文件吗?

App Engine PHP 5 应用必须使用 Cloud Storage 流封装容器在运行时写入文件。但是,如果应用需要读取文件且这些文件是静态的,您可以使用 file_get_contents 等 PHP 文件系统函数选择性地读取随应用一并上传的静态文件。

例如:

$fileContents = file_get_contents($filePath);

其中,指定的路径必须是相对于访问文件的脚本的路径。

将应用部署到 App Engine 时,您必须在应用子目录中上传一个或多个文件,并且必须配置 app.yaml 文件,以便您的应用可以访问这些文件。如需了解完整详情,请参阅使用 app.yaml 配置 PHP 5 应用

app.yaml 配置中,请注意,如果您使用静态文件或目录处理程序(static_filesstatic_dir),则必须指定已设置为 true 的 application_readable,否则您的应用将无法读取相应文件。但是,如果这些文件由 script 处理程序提供,则不需要这样做,因为系统默认这些文件可供脚本处理程序读取。

下一步做什么

要详细了解如何使用 Cloud Storage Tools API,请阅读以下主题: