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

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

问题分析

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

1、源码分析

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

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

2、数据库分析

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

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

3、定时任务源码分析

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

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

4、解决方法

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

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

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

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

5、测试

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

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

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

结束语

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

本文已通过「原本」原创作品认证,未经作者授权请勿直接转载,负责将追究其法律责任。
夏日阳光
  • 本文由 发表于 2022年9月4日 17:18:59
  • 本文为夏日阳光原创文章,未经作者授权禁止转载。
匿名

发表评论

匿名网友 填写信息