trae 中 extension=gd 不生效需确认三点:一是修改对应 PHP 版本(如 php81)的专属 php.ini(通过 trae php ini-path 查得),取消 ;extension=gd 注释或添加该行;二是重启 PHP-FPM(trae php-fpm restart)而非仅 trae restart;三是确保使用 -full 镜像以包含 libpng、libjpeg 等底层依赖。
trae 默认使用的 PHP 是它内置的多版本环境(如 php74、php81),php.ini 文件位置不是系统全局路径,而是每个版本独立配置。直接改错 php.ini 或用系统命令装 gd 扩展完全无效。
实操建议:
trae php list 查看当前启用的 PHP 版本(比如 php81)trae php ini-path php81 获取该版本真实的 php.ini 路径(通常是 ~/.trae/php/php81/etc/php.ini)
trae 的 PHP 是静态编译(不是动态加载 .so),所以不能写 extension=gd.so —— 这会报 Unable to load dynamic library 'gd.so' 错误。正确写法是纯模块名,不带后缀。
实操建议:
php.ini,搜索 gd
;extension=gd 的行,去掉分号,保存extension=gd 在 [PHP] 段落下方(不要加路径,也不加 .so)trae php use 切换的是 CLI 环境,而 web 请求走的是 trae 内置的 PHP-FPM 服务,两者配置文件可能不同 —— 这是最常被忽略的一点。
实操建议:
trae php-fpm restart(不是 trae restart),强制重载 PHP-FPM 配置trae php-fpm status 确认服务已运行,再访问 http://localhost/info.php(内容为 )gd,确认 “GD Support” 显示 enabled,且 “GD Version” 有值(如 bundled (2.1.0 compatible))php -m 有 gd,但网页没有,说明 FPM 用的是另一份 php.ini,重复第一步查路径即使 extension=gd 生效,trae 的 PHP 容器若没预装 libpng、libjpeg、freetype 等底层库,gd 功能仍不完整 —— 图片创建/读取函数会直接报错。
实操建议:
trae exec php81 bash,然后运行 ldd $(php-config --extension-dir)/gd.so | grep -i "png\|jpeg\|freetype"
not found,说明底层库缺失~/.trae/config.yml 中修改对应 PHP 版本的 image 字段,选带 -full 后缀的镜像(如 traefik/php:8.1-apache-full)trae php rebuild php81 重建环境