PHP 8.3 语法变化 - SERVER 值更改符合 RFC3875

作者: 温新

图书: 【PHP 8.3 新特性】

阅读: 512

时间: 2024-11-19 23:27:59

hi,我是温新,一名 PHPer

PHP 有一个内置的与 CGI 兼容的服务器,可以用来测试 PHP 应用程序,而无需使用像 Apache、Nginx 或 Caddy 这样的完全功能的服务器软件。它遵循 RFC3875,该定义了请求元变量及其特征,这些特征在 $_SERVER 超级全局变量中提供给 PHP 应用程序。

在 PHP 8.3 之前,$_SERVER['SERVER_SOFTWARE'] 的值是形式为 PHP %version% Development Server,这违反了RFC3875 - 4.1.17。这是在 PHP 8.3 中修复的,内置的 CLI 服务器现在遵循 RFC 所需的模式。

 PHP/8.3.0 (Development Server) 

请注意,X-Powered-By 值或其格式没有更改。

向后兼容性影响

因为 PHP 内置的 CLI 服务器只用于测试目的,而且 $_SERVER['SERVER_SOFTWARE'] 值不会在 HTTP 头或其他通常的输出中暴露,所以这个改变不太可能对现有的 PHP 应用程序产生任何影响。

检查 $_SERVER['SERVER_SOFTWARE'] 值以确定应用程序是否由内置提供可能会受到影响。

确定应用程序是否由 PHP CLI 运行的客观更好的方法是通过检查 PHP_SAPI 常量名称是否为 cli-server。以前检查过 $_SERVER['SERVER_SOFTWARE'] 值模式的应用程序可以按如下方式更新:

 if (PHP_SAPI === 'cli-server') {}

或者,下面的正则表达式匹配 $_SERVER ['SERVER_DWARE'] 值的两种模式:

/^PHP(.*? Development Server|\/.*? \(Development Server\))$/
if (preg_match("/^PHP(.*? Development Server|\/.*? \(Development Server\))$/", $_SERVER['SERVER_SOFTWARE']) {}
请登录后再评论