standard扩展是PHP内建的,不显示在php -m中,其函数如strlen()、date()直接编译进主二进制文件,无需启用;验证应直接调用函数而非查模块列表。

phpenv 本身不负责开启或配置 PHP 扩展,它只管理 PHP 二进制版本;standard 扩展是 PHP 编译时内置的默认扩展,无法“关闭”,也无需手动开启。
为什么 php -m 看不到 standard 扩展?
因为 standard 不是一个独立加载的模块,而是内建(built-in)扩展:它的函数(如 strlen()、file_get_contents()、date())直接编译进 PHP 主二进制文件,不会出现在 php -m 列表中,也不需要写 extension=standard.so。
- 运行
php --ri standard会提示 “Extension 'standard' does not exist” —— 这是正常现象 - 但调用
var_dump(function_exists('md5'));会返回true,说明功能可用 - 检查是否真缺失:执行
php -r "echo strlen('test');",若报错才说明 PHP 本身异常
哪些扩展容易被误认为是 standard,但其实要手动启用?
常见混淆项其实是 json、ctype、hash、filter 等——它们在现代 PHP 源码中常设为 --enable-xxx 默认开启,但若用 phpenv install 编译安装,且未指定对应选项,就可能被禁用。
- 确认当前 PHP 是否含
json:运行php -m | grep json,无输出则未启用 - 若用
php-build安装,需加参数,例如:phpenv install 8.2.18 --configure-options="--enable-json" - 若已安装但缺失,只能重装;不能后期用
pecl install补 json,因为它不是 PECL 扩展 -
php.ini中写extension=json会失败,因为没有json.so文件
如何验证 standard 相关函数是否真正可用?
不要依赖 php -m 或 get_loaded_extensions(),直接测函数行为更可靠:
立即学习“PHP免费学习笔记(深入)”;
php -r "var_dump(function_exists('trim'), function_exists('parse_url'), extension_loaded('date'));"- 注意:
extension_loaded('date')返回false(date 是内建,非独立扩展),但date('Y')一定可用 - 如果大量基础函数报
Call to undefined function,问题不在配置,而在 PHP 编译时严重缺失组件(如没装libxml2-dev导致 DOM/SimpleXML 失效,连带影响部分 standard 行为)
真正要操心的不是 “开启 standard”,而是确保你用 phpenv install 安装 PHP 时,底层依赖完整、configure 选项合理——否则缺失的是整个功能块,而非某个开关。



















