技术实践
日常思考

Chevereto 提示 ExifTool / ExifTran binary not found at PATH 的修复方法

最近在 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 等信息不会继续保留下来。

参考资料

赞(0) 打赏
未经允许不得转载:Kelro Blog » Chevereto 提示 ExifTool / ExifTran binary not found at PATH 的修复方法

评论 抢沙发