编程

PHP 8.5: 新增 PHP_BUILD_DATE 常量

30 2024-12-27 09:34:00

PHP 8.5 引入了一个名为 PHP_BUILD_DATE 的新 PHP 常量,该常量被赋值了编译 PHP 二进制文件的时间和日期。

PHP 已经引入了 PHP_VERSIONPHP_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