从 PHP 5.5 迁移到最新的 PHP 运行时

本页面介绍了从第一代迁移到第二代 PHP 运行时的说明。如需升级第二代应用以使用受支持的最新 PHP 版本,请参阅升级现有应用

PHP 5 已于 2024 年 1 月 30 日达到支持终止期限。现有的 PHP 5 应用将继续运行并接收流量。但是,App Engine 可能会阻止重新部署使用支持终止日期之后的运行时的应用。我们建议您遵循本页面中的准则迁移到最新支持的 PHP 运行时

迁移到受支持的第二代 PHP 运行时后,您可以通过惯用代码来利用最新的语言功能并构建可移植性更强的应用。

PHP 5.5 与第二代 PHP 运行时之间的兼容性问题

官方 PHP 文档介绍了关于从不同 PHP 版本迁移的相关信息:

PHP 5.5 与第二代 PHP 运行时的主要区别

下面总结了 App Engine 标准环境中的 PHP 5.5 与第二代 PHP 运行时之间的区别:

内存用量差异

与第一代运行时相比,第二代运行时的内存用量基准更高。这是由多种因素造成的,例如基础映像版本不同,以及两代在计算内存用量的方式上存在差异。

第二代运行时在计算实例内存用量时,会将应用进程的内存用量与内存中动态缓存的应用文件数量相加。为避免内存密集型应用因超出内存限制而关停实例,请升级到具有更多内存的更大实例类

CPU 使用率差异

第二代运行时在实例冷启动时会看到更高的 CPU 使用率基准。根据应用的扩缩配置,这可能会导致意外的副作用,例如,如果应用配置为根据 CPU 利用率进行扩缩,则实例数会高于预期。为避免此问题,请查看并测试应用扩缩配置,以确保实例数在可接受的范围内。

请求标头差异

第一代运行时允许将带有下划线(例如 X-Test-Foo_bar)的请求标头转发给应用。第二代运行时将 Nginx 引入了主机架构。由于此更改,第二代运行时配置为自动移除带有下划线 (_) 的标头。为防止出现应用问题,请避免在应用请求标头中使用下划线。

迁移 app.yaml 文件

您必须部署一个前端控制器来处理应用中的所有路由。如需了解详情,请参阅应用启动

第二代 PHP 运行时不允许自定义 script 处理程序元素。唯一有效值是 auto,因为所有流量都使用 entrypoint 命令传送。所有非静态网址处理程序必须包含 script: auto 才能成功部署。

修改了 app.yaml 配置文件中某些元素的行为:

元素更改类型说明
entrypoint已添加可选。您可以使用此字段指定应用启动时将运行的命令
threadsafe已弃用假定所有应用的线程安全,这意味着实例可以同时处理多个请求。
api_version已弃用以前需要,但在第二代 PHP 运行时中不需要。
application_readable已弃用
builtins已弃用
libraries已弃用可以使用 composer.json 元数据文件安装任意第三方依赖项。
handlers已修改
  • script 字段为可选字段,唯一可接受的值是 auto。使用具有应用内路由的网络框架(例如 LaravelSymfonySlim 或类似选项),以在请求到达特定路由时执行脚本。
  • 不支持 login 字段。使用身份和访问权限管理 (IAM) 执行用户管理。

如果您使用了任何已弃用的字段,则应用部署将出错。

如需了解详情,请参阅 app.yaml 参考。

减少运行时限制

与 PHP 5.5 运行时相比,第二代 PHP 运行时的限制较少。

如需了解详情,请参阅 PHP 运行时环境

从 App Engine PHP SDK 迁移

为了减少运行时迁移工作量和复杂性,App Engine 标准环境可让您在第二代 PHP 运行时中访问许多旧版捆绑服务和 API,例如 Memcache。第二代 PHP 应用可以通过 App Engine SDK 调用捆绑服务 API,并访问与 PHP 5 运行时相同的大多数功能。并非所有适用于 PHP 5 的旧版捆绑服务在第二代 PHP 运行时中都有相应的服务。如需查看适用于第二代 PHP 运行时的旧版捆绑服务 API 的完整列表,请参阅旧版捆绑服务 API 参考文档

您还可以选择使用 Google Cloud 产品,其可提供与旧版捆绑服务类似的功能。这些 Google Cloud 产品提供惯用的 Google Cloud CLI 客户端库。对于在 Google Cloud 中无法作为单独产品提供的旧版捆绑服务(例如搜索),您可以使用第三方提供商或使用其他解决方法。如需详细了解如何迁移到未捆绑服务,请参阅从捆绑服务迁移

在本地运行应用

如需测试应用并在本地运行,请执行以下操作:

  1. 在本地安装 PHP 版本,该版本与 App Engine 标准环境中提供的第二代 PHP 运行时相对应。

  2. 安装 Web 服务器并使用它在本地提供应用。

例如,通过运行以下命令启动 HTTP 服务器:

php -S localhost:8080

然后,使用网络浏览器访问 http://localhost:8080 以查看应用。