baldwin/magento2-module-image-cleanup
Magento 2模块,可用于清理不再使用的旧图像文件
Requires
- php: ~7.3.0 || ~7.4.0 || ~8.1.0 || ~8.2.0 || ~8.3.0
- magento/framework: ^102.0.4 || ^103.0
- magento/module-catalog: ^103.0.4 || ^104.0
- magento/module-eav: ^102.0.4
- magento/module-store: ^101.0.4
- magento/module-theme: ^101.0.4
- symfony/console: ^4.0 || ^5.0 || ^6.0
Requires (Dev)
README
目的
在您的网店中添加产品时,最终您还必须删除其中一些产品。但是有时,当您删除产品时,Magento不会删除与这些产品关联的图像。
因此,您必须不时手动从磁盘删除它们,这很难手动完成。本模块为您提供了一些选项,可以从磁盘删除这些挂起的未使用图像,以便您可以在服务器上回收一些磁盘空间。
实现功能
- 它可以在磁盘上找到数据库未引用的产品图像文件并将其删除
- 它可以对那些图像的调整大小(缓存)版本执行相同的操作
- 如果原始文件仍在使用中,它将尝试不删除动态生成的图像文件(如
webp
或avif
文件),请参阅配置 - 它可以检测整个未使用的调整大小(缓存)目录,这些目录不再有效,并删除其中的所有文件,请参阅下面
- 它可以检测并删除数据库表
catalog_product_entity_media_gallery
中的过时值 - 它可以找到损坏的调整大小产品图像文件并将其删除
注意
- 模块将始终首先输出它将要删除的内容,在确认之前请确保检查整个列表,以免删除您不希望删除的文件。在完全了解它将做什么之前,请不要在生产环境中测试此模块!
- 当您的Magento商店配置为在数据库中存储图像文件时,尚未测试此模块,您使用这种方式时的表现可能会有所不同。如有任何问题,请随时打开问题,我们将看看是否能修复一些问题...
兼容性
- 此模块应与Magento 2.3.4或更高版本兼容
- 此模块应与PHP 7.3、7.4、8.1、8.2和8.3兼容
安装
您可以使用Composer安装此模块
composer require baldwin/magento2-module-image-cleanup
或下载代码,并将所有文件放入目录app/code/Baldwin/ImageCleanup
之后,您可以在Magento中使用以下命令激活它:
bin/magento setup:upgrade
使用方法
您可以使用4个命令行命令执行操作
bin/magento catalog:images:remove-obsolete-db-entries
bin/magento catalog:images:remove-unused-hash-directories
bin/magento catalog:images:remove-unused-files
bin/magento catalog:images:remove-corrupt-resized-files
这些命令中的一些有额外的选项
--no-stats Skip calculating and outputting stats (filesizes, number of files, ...), this can speed up the command in case it runs slowly.
-n, --no-interaction Do not ask any interactive question
如果您想设置一个cronjob来定期调用这些清理命令,可以使用-n
选项,它将不会在删除文件之前询问确认,并且将假定您说“是的,继续”(这可能是危险的!)
模块将在日志文件{magento-project}/var/log/baldwin-imagecleanup.log
中输出所有已删除的内容,以便您稍后检查,以了解为什么某些内容被删除。
为了优化和最快的清理,建议按以下顺序运行命令
bin/magento catalog:images:remove-obsolete-db-entries
bin/magento catalog:images:remove-unused-hash-directories
bin/magento catalog:images:remove-unused-files
bin/magento catalog:images:remove-corrupt-resized-files
如果您不按此顺序运行这些命令,则可能意味着您需要再次运行其中一些命令才能找到更多要清理的内容,或者它们可能需要比所需更长的时间。
配置
在后台办公室中有一个配置部分,位于:商店 > 配置 > 目录 > 目录 > 产品图片清理设置
- 动态生成的图像文件扩展名列表:一些Magento商店可能安装了模块以动态生成从原始产品图像文件中生成的
webp
或avif
图像文件。这些文件通常不在Magento数据库中引用,因此通过在配置中指定这些文件扩展名,我们可以防止它们被意外删除。当原始文件在数据库中不再被引用时,模块仍然能够删除这些类型的文件。
此功能仅在动态生成的图像文件使用与原始文件相同的文件名时才能正常工作,因此它们只能在使用的文件扩展名上不同(可以是替换或附加)。
关于调整大小/缓存的目录文档
Magento将调整大小的产品图像保存在pub/media/catalog/product/cache
中的特定目录中。目录名称基本上是一组参数(如宽度、高度、背景颜色、质量、旋转等)的md5散列(这些参数通常定义在主题的etc/view.xml
文件中)。有时,Magento会修改某些新版本的Magento中哈希的计算方式,或者您的主题更改了一些参数,这都可能使这些哈希不再使用。
此模块具有检测此类目录并与其中的所有文件一起删除的选项。
自注
在我们的类Baldwin\ImageCleanup\Finder\UnusedCacheHashDirectoriesFinder
中,我们从核心Magento中借用了某些私有且不易调用的代码。我们对代码进行了非常小的修改以处理编码标准和静态分析,但大部分与原始源相同。这些代码基于自Magento 2.3.4以来没有真正改变的代码。
检查每个新发布的Magento版本,确保Magento\MediaStorage\Service\ImageResize
中的代码没有发生变化,这样我们就不需要调整我们的实现,这是很重要的。
因此,这是每次新发布Magento时都需要仔细检查的事项。