tidy 扩展在 xampp 中默认未预装且不可用:windows 下官方不提供兼容 dll,强行加载必报位数或线程模型错误;linux/macos 必须用 32 位工具链源码编译 tidy.so 并严格匹配 xampp 的 php 版本与路径,否则 php -m 和 phpinfo() 均不可见。

tidy 扩展在 XAMPP 中默认未启用,且 Windows 和 Linux/macOS 下启用方式完全不同:Windows 只能靠 DLL(官方不提供),Linux/macOS 必须源码编译,且必须与 XAMPP 的位数严格一致(XAMPP 是 32 位,哪怕系统是 64 位)。
为什么 php -m 看不到 tidy,但 phpinfo() 里也找不到?
因为 tidy 不是 XAMPP 预装扩展,它依赖外部 libtidy 库,而 XAMPP 自带的开发环境不包含该库。常见现象包括:
-
PHP Warning: PHP Startup: Unable to load dynamic library 'tidy'—— DLL 或 SO 文件缺失或路径错误 -
tidy.so: cannot open shared object file: No such file or directory—— 编译时没指定--with-tidy或libtidy未安装 - 即使扩展加载成功,
new tidy()报Class 'tidy' not found—— 实际是扩展没真正载入,不是类名问题
Windows 下基本不可行,别白费时间下载 DLL
XAMPP for Windows 官方从不提供 php_tidy.dll,PECL 上的预编译包(如 php_tidy-2.2.0-7.4-ts-vc15-x64.zip)全是为标准 PHP 编译的,与 XAMPP 的 Apache 模块不兼容。尝试强行复制 DLL 到 \xampp\php\ext\ 后重启 Apache,几乎必然触发:
-
%1 is not a valid Win32 application—— 位数/线程模型(TS/NTS)不匹配 - Apache 启动失败,控制面板卡在 “Starting”
- 日志中出现
Unable to load dynamic library 'tidy',但文件明明存在
结论:Windows + XAMPP 组合下,tidy 扩展实质上不可用。
Linux/macOS 下必须手动编译,且必须用 32 位工具链
XAMPP for Linux 是 32 位程序(哪怕系统是 x86_64),所以 tidy.so 必须是 32 位 ELF。关键步骤:
- 先卸载系统级的
libtidy:sudo yum remove libtidy libtidy-devel(CentOS)或sudo apt remove libtidy-dev(Ubuntu),避免干扰 - 下载
tidy源码(非包管理器安装),解压后进入目录,执行:./configure CFLAGS="-m32 -fPIC" LDFLAGS="-m32"→make && sudo make install - 进入 PHP 源码中的
ext/tidy目录(需与 XAMPP 的 PHP 版本一致),运行:/opt/lampp/bin/phpize→./configure --with-php-config=/opt/lampp/bin/php-config --with-tidy=/usr/local→ 修改生成的Makefile,在CFLAGS行末尾追加-m32 -fPIC→make && sudo make install - 确认
/opt/lampp/etc/php.ini中有:extension=tidy.so,且extension_dir指向/opt/lampp/lib/php/extensions/no-debug-non-zts-20220829/(路径以php -i | grep extension_dir输出为准)
替代方案:用命令行 tidy 工具临时处理 HTML
如果只是想清理 HTML(比如修复标签嵌套、缩进、转义),不必强求 PHP 扩展。直接用系统级 tidy 命令更可靠:
tidy -indent -wrap 120 -utf8 -f /tmp/errors.txt input.html > output.html
注意:tidy 命令本身和 PHP 的 tidy 扩展是两套东西,前者是独立 CLI 工具,后者是 PHP 绑定。XAMPP 不附带 CLI tidy,需单独安装(sudo apt install tidy 或 yum install tidy),但不会影响 PHP 运行。
最易被忽略的一点:XAMPP 的 php.ini 路径和 CLI 使用的 php.ini 可能不同,extension=tidy.so 写错文件位置,等于没写。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











