Windows 7下开启PHP的gd扩展需严格匹配PHP版本、TS/NTS及VC编译器,补全libfreetype-6.dll、libjpeg-9.dll、libpng16-16.dll至PHP根目录,修正php.ini中extension_dir和extension=php_gd2.dll,重启服务后用gd_info()验证各项支持是否为true。

Windows 7 下开启 PHP 的 gd 扩展,不是简单地在 php.ini 里取消注释 extension=php_gd2.dll 就能成——它依赖底层图形库(如 freetype、jpeg、png),而 Windows 官方二进制包默认不带这些 DLL 的运行时支持。直接启用会报错或 gd_info() 返回空数组。
确认 PHP 版本与线程安全模式(TS/NTS)
这是后续所有操作的前提,错配会导致扩展加载失败或 Apache 崩溃:
- 用
phpinfo()查看PHP Extension Build一行,例如API20151012,TS,VC14→ 表示是线程安全(TS)、VC14 编译、PHP 7.0+; - 对应下载的
php_gd2.dll必须严格匹配:同 PHP 主版本、同 TS/NTS、同 VC 编译器(VC9/VC11/VC14/VC17); - Windows 7 上常见组合是 PHP 5.6/7.0/7.1 + VC14 + TS,对应扩展名通常是
php_gd2.dll(不是php_gd.dll)。
手动补全 GD 依赖的 DLL 文件
官方 PHP zip 包中 php_gd2.dll 是“阉割版”,它需要外部 DLL 才能调用字体、JPEG、PNG 功能。缺任何一个,gd_info() 中对应项就是 false:
- 必须把以下 DLL 复制到
php/根目录(和php.exe同级),**不是**只放ext/目录:libfreetype-6.dll、libjpeg-9.dll(或libjpeg.dll)、libpng16-16.dll(或libpng.dll); - 这些文件通常来自 PHP SDK 的
deps包,或从旧版 WAMP/XAMPP 的php/目录提取; - 若复制后仍报
Unable to load dynamic library 'php_gd2.dll',用Dependency Walker(或lddfor Windows 工具)检查php_gd2.dll缺少哪个 DLL; - 不要把它们丢进
system32—— 这是过时且易冲突的做法。
修改 php.ini 并验证 gd 是否真正可用
光写 extension=php_gd2.dll 不够,还要确保路径和依赖链完整:
立即学习“PHP免费学习笔记(深入)”;
- 确认
extension_dir指向正确的ext/路径,例如:extension_dir = "D:/php/ext"(注意反斜杠或正斜杠均可,但不能混用); - 去掉
;extension=php_gd2.dll前的分号,保存; - **重启整个 Web 服务**(Apache 或 Nginx),不是只刷新页面;
- 写一个测试脚本:
<?php var_dump(gd_info()); ?>
,重点看"FreeType Support"、"JPEG Support"、"PNG Support"是否为true; - 如果只有
"GD Version"显示但其余为false,说明 DLL 没放对位置或版本不匹配。
最容易被忽略的是:PHP 7.1+ 官方包已移除 freetype 支持,即使你放了 libfreetype-6.dll,imagettftext() 仍可能报 Call to undefined function imagettftext() —— 这时候你得换用带完整 GD 的第三方包(如 XAMPP 自带版本),或降级到 PHP 7.0.x 官方包再手动补全依赖。



















