phpenv中需手动编辑对应php版本的php.ini,先启用mbstring再启用exif,重启php进程后用真实jpeg测试脚本验证;扩展不支持写入,修改exif需调用exiftool。

phpEnv 默认不启用 exif 扩展,必须手动开启,否则 exif_read_data() 会报错或返回空数组。
确认 phpEnv 当前 PHP 版本和配置路径
phpEnv 是多版本共存环境,不同 PHP 版本的配置独立。先确定你正在用哪个版本:
- 打开 phpEnv 主界面 → 点击「PHP 设置」→ 查看右上角显示的当前激活版本(如
8.1.27) - 对应配置文件路径通常是:
C:\phpenv\versions\8.1.27\php.ini(Windows)或/usr/local/phpenv/versions/8.1.27/php.ini(Linux/macOS) - 别改错版本的
php.ini,否则重启后依然无效
启用 exif 扩展前必须确保 mbstring 已加载
exif 扩展依赖 mbstring,phpEnv 中它默认常被禁用。顺序不能错:
- 打开对应版本的
php.ini - 搜索
extension=mbstring,去掉前面的分号(;),确保这一行是启用状态 - 再搜索
extension=exif,同样去掉分号;若该行不存在,手动添加一行:extension=exif - 保存后,在 phpEnv 界面点击「重启 Apache」或「重启 PHP-FPM」——仅重启 Web 服务不够,必须重启 PHP 进程本身
验证 exif 是否真正生效
写个最小测试脚本,别只靠 phpinfo() 页面判断:
<?php if (!extension_loaded('exif')) {
die('exif 扩展未加载');
}
if (!function_exists('exif_read_data')) {
die('exif_read_data 函数不可用');
}
$image = __DIR__ . '/test.jpg';
if (!file_exists($image) || !is_readable($image)) {
die('测试图片不存在或不可读');
}
$exif = exif_read_data($image);
var_dump($exif === false ? '无 EXIF 数据(可能格式不对或数据损坏)' : array_keys($exif));
?>
- 必须用真实 JPEG 文件(PNG/TIFF 不支持或部分字段缺失)
- 如果输出
无 EXIF 数据,不是扩展问题,而是图片本身没带 EXIF —— 可用 Windows 属性面板或exiftool test.jpg验证 - 中文字段乱码?那是编码问题,不是扩展没开,后续需用
mb_convert_encoding()处理
常见失败原因和绕过方式
即使扩展开了、函数存在、图片有 EXIF,exif_read_data() 仍可能返回空:
-
exif_read_data(): File not supported:图片是 WebP、HEIC 或被压缩重存过的 JPEG(EXIF 被剥离) - 返回数组但关键字段(如
DateTimeOriginal、Model)缺失:厂商自定义标签未被 PHP exif 模块识别,非 bug - 想修改 EXIF?
exif_read_data()只读,phpEnv 下无法直接写入;得调用外部exiftool命令(需提前安装并加入系统 PATH) - 权限问题:Windows 下 IIS 或 Apache 以低权限运行时,可能无法读取某些路径下的图片,换到
htdocs子目录再试
最易被忽略的一点:phpEnv 的「PHP 设置」界面里勾选「启用 EXIF」只是 UI 提示,实际不修改任何配置文件,所有改动必须手动编辑对应版本的 php.ini 并重启进程。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











