PHP 8.3 语法变化 - SERVER 值更改符合 RFC3875
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']) {}
请登录后再评论