k-holyのPHPとか諸々メモ

Webで働くk-holyがPHP(スクリプト言語)とか諸々のことをメモしていきます。ソースコードはだいたいWindowsで動かしてます。

SymfonyのFinderコンポーネントを使ってみた

今まで、ディレクトリ内ファイルの再帰処理にはSPLの RecursiveDirectoryIterator + RecursiveIteratorIterator 、フィルタ処理が必要な場合は RecursiveFilterIterator 、独自ソートが必要な場合は SplHeap を継承という感じで組み合わせて使っていたんですが、PHP5.3環境の普及とComposerを使いだしてから気分的にもSymfonyコンポーネントを導入しやすくなったので、今回初めてFinderコンポーネントを使ってみました。

以下、特定の命名規則に合致したJPEGファイルを再帰処理するサンプルです。

サンプルではただ画像を表示しているだけですが、ついでに Fileinfo関数(finfoクラス)を使って、MimeTypeのチェックも行ってます。
また、実際には元画像から複数サイズのサムネイル画像を作成して保存する、といったバッチ的な処理を行いました。

Finderコンポーネントでは、Symfony\Component\Finder名前空間でSPLのSplInfoクラスを継承したSplInfoクラスを定義するという荒業もやっていて、このクラスに定義されている getRelativePathname() メソッドがなかなか便利です。
Finderクラスには検索対象のディレクトリを指定するんですが、そこからの相対パスを取得できるので、上記サンプルのようにカレントディレクトリを指定してHTTPで画像を表示させるといった単純だけど面倒なことが容易にできたりします。

SPLを組み合わせる場合と比べてできることに大きな違いはないかもしれませんが、メソッドチェーンで直観的に書けるところがいいですね。コメントアウトなども容易ですし。
SymfonyのFinderコンポーネント、今後も積極的に使っていこうと思います。

※参考記事
PHPメンターズ -> Pieceの中のSymfony #1: Finderコンポーネント
http://phpmentors.jp/post/21416629692/piece-symfony-1-finder