PHP 5.5 与 PHP 7/8 之间的差异

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

本页面介绍如何在 App Engine 标准环境中将 PHP 5.5 应用迁移到 PHP 7/8 运行时。

PHP 5.5 和 PHP 7/8 之间的兼容性问题

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

PHP 5.5 与 PHP 7/8 之间的重要差异

下面总结了 App Engine 标准环境中的 PHP 5.5 与 PHP 7/8 运行时之间的差异:

内存用量差异

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

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

CPU 使用率差异

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

请求标头差异

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

迁移 app.yaml 文件

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

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

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

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

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

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

减少运行时限制

相比 PHP 5.5 运行时,PHP 7/8 运行时的限制较少。

如需了解详情,请参阅 PHP 7/8 运行时环境文档

从 App Engine PHP SDK 迁移

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

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

在本地运行应用

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

  1. 在本地安装 PHP 版本,该版本与 App Engine 标准环境中可用的 PHP 7/8 运行时之一相对应。
  2. 安装 Web 服务器并使用它在本地提供应用。

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

php -S localhost:8080

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