通过定时任务解决 Chevereto 外部存储图片无法删除的问题

教程分享评论3,2223字数 830阅读模式

近期,在使用 Chevereto 程序的时候,发现了一个奇怪的问题,每次删除图片的时候,虽然数据库中的记录已经被删除了,但是,外部存储中的图片并没有被删除掉,针对这个问题,本文简单分享一下通过定时任务解决 Chevereto 外部存储图片无法删除的方法。

通过定时任务解决 Chevereto 外部存储图片无法删除的问题-图片1

问题分析

如果使用了外部存储,删除图片的时候正常来说外部存储中对应的图片也需要被删除,程序源码中提供了删除的代码,但是需要我们手动执行定时任务来执行删除代码。

1、源码分析

在 app/lib/classes/class.storage.php 文件的 deleteFiles 方法中,找到了下面这句注释代码:

// Just for CHV::DB, the real thing will be deleted in the queue

意思是说:删除图片的时候,只操作数据库,文件删除在队列中执行。

2、数据库分析

在 ch_queues 表中,可以看到队列任务的记录,其中任务的状态为 pending,意思是 “待办”,于是可以猜测队列任务没有执行。

通过定时任务解决 Chevereto 外部存储图片无法删除的问题-图片2

3、定时任务源码分析

在 app/cron.php 这个文件中,可以看到任务包含:删除外部存储图片,删除未经确认的用户帐号等,于是想到,可以通过定时任务来执行该文件代码。

通过定时任务解决 Chevereto 外部存储图片无法删除的问题-图片3

4、解决方法

最终,在官方论坛中找到了解决方法,执行下述定时任务:

php /www/wwwroot/chevereto/cli.php -C cron

以宝塔面板为例,配置如下定时任务:

通过定时任务解决 Chevereto 外部存储图片无法删除的问题-图片4

本文是以 Chevereto v3.20.18 为例来说明的,低版本中没有 cli.php 文件,可升级至 v3.20.18.

5、测试

手动执行上述定时任务,宝塔面板定时任务的输出日志:

通过定时任务解决 Chevereto 外部存储图片无法删除的问题-图片5

查看外部存储,发现图片已经被删除了。至此,大功告成!

结束语

针对 Chevereto 外部存储中的图片无法被删除的这个问题,Chevereto 源码已经提供了删除代码,只不过需要我们手动执行定时任务来配合完成。这个问题困扰我有一段时间了,今天终于找到了完美的解决方法,故记录一下,方便有此需求的小伙伴参考。

本文已通过「原本」原创作品认证,转载请注明文章出处及链接。

夏日阳光
  • 本文由 夏日阳光 发表于 2022年8月10日
  • 本文为夏日阳光原创文章,转载请务必保留本文链接:https://www.pieruo.com/221.html
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证