PHP 8.5: 新增 PHP_BUILD_DATE 常量
PHP 8.5 引入了一个名为 PHP_BUILD_DATE
的新 PHP 常量,该常量被赋值了编译 PHP 二进制文件的时间和日期。
PHP 已经引入了 PHP_VERSION
和 PHP_VERSION_ID
等常量,它们公开了正在运行的 PHP 二进制文件的版本信息。
但是,构建日期/时间以前只能从 phpinfo
函数中获得。从 phpinfo
函数中提取编译日期和时间是不方便的,因为它直接将文本打印到标准输出,调用者必须收集这些信息并对其进行解析。更糟糕的是,取决于 phpinfo
是否在 CLI 中运行,phpinfo
会以纯文本或 HTML 打印文本。
使用新的 PHP_BUILD_DATE
常量,可以直接访问编译日期和时间。
echo PHP_BUILD_DATE;
// Sep 16 2025 10:44:26
PHP_BUILD_DATE
日期和时间格式
PHP_BUILD_DATE
常量的日期时间格式为 PHP 的 M j Y H:i:s
。
请注意,如果月份的日期小于 10,则月份的日期(j
)将以空格作为前缀。例如,9 月 3 日编译的 PHP 将使得 PHP_BUILD_DATE
值为 Sep 3 2025 10:44:26
。
这个值可以被解析为 DateTimeImmutable
对象。如下所示:
$dt = DateTimeImmutable::createFromFormat('M j Y H:i:s', PHP_BUILD_DATE);
$dt->format('U'); // Unix timestamp, e.g. "1758019466"
$dt->format('Y-M-d'); // "2025-Sep-16"
向后兼容性影响
PHP_BUILD_DATE
常量是 PHP 8.5 中添加的一个新常量。除非 PHP 应用在全局命名空间中声明一个同名常量,否则此更改不会导致任何向后兼容性问题。
在以前的 PHP 版本中,虽然很麻烦,但可以从 phpinfo
输出中提取相同的值:
ob_start();
phpinfo(INFO_GENERAL);
$info = ob_get_clean();
preg_match('@Build Date(?:( => | </td><td class="v">))(?<buildtime>[A-Za-z]{3} (?: \d|\d\d) \d{4} \d{2}:\d{2}:\d{2})@', $info, $matches);
echo $matches['buildtime']; // Sep 16 2025 10:44:26