最近在 Chevereto 后台看到两条红色提示:
ExifTool binary not found at PATH ExifTran binary not found at PATH
图片上传本身通常不会受到影响,不过 ExifTool 和 ExifTran 没有正常调用后,上传图片时删除 EXIF、JPEG 自动方向校正等功能可能无法正常使用。
这次主要记录一下实际处理过程。适用于 Chevereto V4 + PHP-FPM 的常见部署环境,Debian、Ubuntu 以及宝塔面板用户都可以参考。不同服务器上的 PHP 版本和网站目录可能不一样,操作时根据自己的实际环境替换即可。
ExifTool 和 ExifTran 是做什么的
先简单说一下这两个程序的作用。
- ExifTool:主要用于读取和处理图片中的 EXIF 元数据,例如 GPS、拍摄时间、设备型号、ISO 等信息。
- ExifTran:主要用于 JPEG 图片无损旋转,Chevereto 可以根据 EXIF 中的方向信息自动校正图片方向。
它们不是 Chevereto 能不能上传图片的关键依赖,所以即使后台报错,图床看起来也可能仍然可以正常使用。
不过对于公开图床来说,我还是建议把这两个程序配置好,尤其是上传时自动清除 EXIF,可以避免手机原图里面的 GPS 等信息一起被保留下来。
先安装 ExifTool 和 ExifTran
SSH 登录服务器后执行:
apt update apt install -y libimage-exiftool-perl exiftran
Debian 和 Ubuntu 中,libimage-exiftool-perl 会提供 exiftool 命令,exiftran 软件包则提供同名程序。
安装完成后检查一下路径:
command -v exiftool command -v exiftran
正常情况下会看到类似:
/usr/bin/exiftool /usr/bin/exiftran
如果想顺便确认一下版本,也可以执行:
exiftool -ver
dpkg-query -W -f='${Package} ${Version}\n' libimage-exiftool-perl exiftran
程序已经安装,Chevereto 还是报错
这里是比较容易遇到的问题。
SSH 里面执行 command -v 已经可以正常找到两个程序,但刷新 Chevereto 后台以后,依旧显示:
ExifTool binary not found at PATH ExifTran binary not found at PATH
这种情况一般就不是程序没有安装,而是 Chevereto 所在的 PHP-FPM 运行环境没有正常通过 PATH 找到 /usr/bin 下面的程序。
Shell 和 PHP-FPM 的运行环境并不完全一样,所以 SSH 能找到,不代表 PHP-FPM 一定也能找到。
这种情况下没必要专门去修改整套 PHP-FPM 的全局 PATH,直接在 Chevereto 里面指定程序的绝对路径更简单。
在 env.php 中指定绝对路径
先找到 Chevereto 的 app/env.php。
如果不确定网站目录,可以搜索:
find /www/wwwroot -type f -path '*/app/env.php' -print
找到以后,先备份一下原文件。
例如网站目录为:
/www/wwwroot/example.com
可以执行:
cp -a /www/wwwroot/example.com/app/env.php \ /root/chevereto-env.php.bak-before-exif chmod 600 /root/chevereto-env.php.bak-before-exif
备份我更建议放在 /root 之类的网站目录之外,不要直接在网站目录里面留下包含数据库配置的备份文件。
然后使用宝塔文件管理器或者文本编辑器打开:
/www/wwwroot/example.com/app/env.php
在 return [ 后面加入:
'CHEVERETO_BINARY_EXIFTOOL' => '/usr/bin/exiftool', 'CHEVERETO_BINARY_EXIFTRAN' => '/usr/bin/exiftran',
结构大概是这样:
<?php
return [
'CHEVERETO_BINARY_EXIFTOOL' => '/usr/bin/exiftool',
'CHEVERETO_BINARY_EXIFTRAN' => '/usr/bin/exiftran',
// 原有配置继续保留
];
这里只增加两项配置,不要覆盖原来的数组内容。
如果 env.php 中本身已经存在这两个变量,直接修改原来的值即可,不要重复添加。
另外 env.php 通常还包含数据库账号、密码等信息,不建议把完整文件内容直接发到论坛或者公开页面。
检查 PHP 语法
修改完成后先不要急着刷新网站,最好先检查一下 PHP 语法。
宝塔不同 PHP 版本的命令路径不同,例如 PHP 8.3 可以参考:
/www/server/php/83/bin/php -l /www/wwwroot/example.com/app/env.php
正常会返回:
No syntax errors detected in /www/wwwroot/example.com/app/env.php
如果使用的是 PHP 8.2,则通常改成:
/www/server/php/82/bin/php -l /www/wwwroot/example.com/app/env.php
这里的版本号和网站目录都根据自己的实际情况替换。
重启 PHP-FPM
确认语法没问题后,重启当前网站使用的 PHP-FPM。
例如 PHP 8.3:
/etc/init.d/php-fpm-83 restart
PHP 8.2:
/etc/init.d/php-fpm-82 restart
也可以直接在宝塔面板里面找到对应 PHP 版本,然后执行重启。
完成以后重新进入 Chevereto 仪表盘,正常情况下 ExifTool 和 ExifTran 的两条红色提示就会消失。
开启上传时自动删除 EXIF
既然 ExifTool 已经可以正常使用了,可以顺便把新上传图片的 EXIF 清理打开。
进入 Chevereto 后台:
设置 → 文件上传
找到 EXIF 相关选项,设置为:
图像的 EXIF 数据:删除 图像的 EXIF 数据(用户设定):禁用
第一项是让 Chevereto 在图片上传时删除 EXIF。
第二项则是不允许用户自己把这个设置改成保留,这样所有新上传图片都会统一执行。
如果是公开图床,我个人更倾向这种设置。手机原图里面有时候会带 GPS 坐标、拍摄时间、设备型号等信息,没有保留需求的话直接清掉更省心。
不要和“显示 EXIF”搞混
Chevereto 里面还有一个:
设置 → 主题 → 显示 EXIF 数据
这个设置只控制网页前台要不要把 EXIF 信息显示出来。
即使这里关闭了,只要原始图片本身还保存着 EXIF,别人下载原图以后依旧可以读取。
真正决定上传时是否删除元数据的,是“文件上传”里面的 EXIF 设置。
测试是否真的清理成功
设置完成后,最好实际上传一张图片测试一下。
建议找一张之前从来没有上传过的手机或者相机原图。
如果使用以前传过的图片,Chevereto 有可能通过重复图片识别直接返回之前保存的文件,这样就不好判断新的设置有没有生效。
上传完成后下载网站保存的原图,然后执行:
exiftool 测试图片.jpg
主要看下面这些信息还有没有:
- GPS 经纬度和海拔
- 手机或相机型号
- 原始拍摄日期和时间
- 镜头信息
- ISO、曝光等相机参数
这些内容消失以后,基本就说明上传时的 EXIF 清理已经正常工作。
ExifTool 仍然可能显示:
- 文件名
- 文件大小
- 图片宽高
- 文件修改时间
- MIME 类型
这些属于文件系统或者图片本身的基础结构信息,不代表 EXIF 没有删除。
几个顺便记录的问题
command -v 已经能找到,为什么 Chevereto 还是报错?
因为 SSH Shell 和 PHP-FPM 使用的运行环境不一定相同。
command -v exiftool 返回 /usr/bin/exiftool,只能说明当前 SSH Shell 可以找到它。
PHP-FPM 不一定继承相同的 PATH,所以 Chevereto 依旧可能报找不到程序。
直接在 app/env.php 中指定绝对路径,就可以绕过这个问题。
安装时需要执行 apt upgrade 吗?
不需要。
apt update 只是更新软件包索引,之后即使提示有其他软件可以升级,也和这次 ExifTool / ExifTran 的问题没有直接关系。
只安装需要的软件包就行:
apt install -y libimage-exiftool-perl exiftran
删除 EXIF 会影响图片画质吗?
正常不会。
ExifTool 清理的是图片里面的元数据,不需要重新压缩图片像素。
ExifTran 对 JPEG 方向的处理也是无损方式,所以一般不用担心因为这两个功能导致图片明显掉画质。
以前上传的图片会自动清理吗?
不会。
后台开启删除 EXIF 后,主要影响之后新上传的图片,之前已经存储在服务器上的原图不会自动重新处理。
如果历史图片也需要清理,建议先完整备份,再单独进行批量处理,不要直接对整个图库执行删除操作。
还在报错怎么办?
可以按下面几个地方继续检查:
ls -l /usr/bin/exiftool ls -l /usr/bin/exiftran /usr/bin/exiftool -ver /usr/bin/exiftran -h
先确认文件确实存在,并且程序本身能够正常执行。
然后再确认 env.php 中写的是实际路径:
'CHEVERETO_BINARY_EXIFTOOL' => '/usr/bin/exiftool', 'CHEVERETO_BINARY_EXIFTRAN' => '/usr/bin/exiftran',
最后确认修改的是当前网站真正使用的 Chevereto 配置文件,并且已经重启网站实际使用的 PHP-FPM 版本。
最后
这类问题看起来像是 ExifTool 和 ExifTran 没安装,实际上很多时候程序已经在 /usr/bin 里面了,只是 PHP-FPM 环境没有让 Chevereto 正常找到。
我更推荐直接在 app/env.php 指定绝对路径:
'CHEVERETO_BINARY_EXIFTOOL' => '/usr/bin/exiftool', 'CHEVERETO_BINARY_EXIFTRAN' => '/usr/bin/exiftran',
这样改动范围比较小,也不需要为了两个程序专门去调整整个 PHP-FPM 的环境变量。
如果是公开使用的图床,修好以后也可以顺便把上传图片自动删除 EXIF 打开,至少手机原图里面比较敏感的 GPS 等信息不会继续保留下来。





