web-dev-qa-db-ja.com

すべての孤立した画像ファイルのリストを取得するにはどうすればよいですか?

コンテンツアイテムで使用されなくなったイメージのリストを作成して、ディスクから削除できるようにしたいと考えています。そのようなリストを生成するための最良の方法は何ですか?

8
miroxlav

これを行うための最良の方法があるかどうかはわかりません。私が考えることができる唯一の方法は少し努力が必要です。つまり、データベースのコンテンツテーブル(およびモジュール、メニュー、バナーなど)のすべての画像のリストを生成し、そのリストをすべての画像と比較します。ファイルシステムで、各リストを比較し、使用されていないイメージを削除します。

したがって、これは次のようになります。

1)com_contentのデータベーステーブル内のすべての画像のリストを取得します。すべての行をダンプします。正規表現は<img src="images/stories/an-image.jpg" />です。別の方法は、phpのstrip_tags()メソッドを使用して、タグのみを許可することです。これは、一般的に正規表現を書くより簡単です。基本的にphpスクリプトを実行して、このリストをテキストドキュメントまたはcsvとして作成します。

2)サイト上のすべての画像のリストを取得します。コマンドラインからgrepを使用してこれを実行できます。おそらく、ある種の再帰的なphpファイルシステムメソッドでも同じことができます。

3)両方をスプレッドシートに入れ、各列に対して何らかの比較を実行して画像が使用されているかどうかを確認し、3番目の列で未使用の画像のリストをコンパイルします。

-

個人的には、あなたががらくたの画像を持っていない限り、私はこれが努力する価値があると確信しません。ただし、ユースケースが保留中であることを確認する必要があります。また、他の誰かが提案しなければならないはるかに簡単な解決策があるかもしれません!

5
Chad Windnagle

アクセスログがあれば、過去Xか月間に要求されたすべての画像ファイルを引き出すことができる場合があります(このすべてのデータで遊ぶ必要があります)。したがって、これらは実際のサイトで使用されている可能性があります(まだ100%ではありません)。コンテンツとサイトの構造に応じて、またサイトがそれほど大きくない場合(つまり、100万の記事)、残りはおそらく使用されていない可能性があります(これも100%ではありません)。

この解決策は簡単だと思います。削除する前にイメージをバックアップします。特定のファイルを開こうとする404エラーを後で追跡でき、これらを復元することができます。

それは汚い解決策ですが、本当に簡単な方法はありません。最良のオプションは、チャドのアドバイスに従い、独自のパーサーを作成することです。

3
Ivo

私はそれを行う既存の拡張機能を知りません。最善の策は、コンテンツを格納できるデータベース内のテーブルに対して各画像をチェックして、それらが使用されているかどうかを確認するスクリプトを作成することです。

3
Michael

質問時に拡張機能は存在しませんでしたが、2018年8月現在、孤立したイメージを見つけて削除できる拡張機能が少なくとも2つあります。

VX orphanImages (有料拡張機能)

「VX orphanImagesプラグインは、Joomla!サイト画像フォルダーをスキャンして、サイトのコンテンツで使用されていないアイテムを見つけます。コアメディアコンポーネントを使用して、リスト内の孤立した画像にマークを付けるため、それらを保持するか削除するかを決定できます。 」

ImageManager (無料/有料バージョン)

「ImageManager for Joomla!を使用すると、記事やカスタムHTMLモジュールの画像リンクを失うことなく、画像を移動して名前を変更できます。画像をドラッグアンドドロップするだけで、ウェブサイトを再構築してクリーンアップできます。また、未使用の画像をすべて一覧表示して削除することもできます。 」

0
Neil Robertson