2010-11-18 11 views
1

私は次のことについています。コレクション内特定のフォルダ内のファイルを、PHPを使用してサブフォルダで検索します。

images/collections/ 

は私がしようとしています何

imageProductCode-something.jpg 

のように命名されている多数のサブフォルダ

images/collections/collection1, images/collections/collection2 

イメージがあるかもしれませんフォルダ以下のように

私はフォルダツリーを持っています私の製品コードである1つの変数をスクリプトに渡します。このスクリプトは次に、フォルダとそのパスを返す...

images/collections/collection3/imageProductCode-something.jpg 

答えて

0

あなたは< 5.3でPHPのバージョンを使用している場合は、再帰を自分で記述する必要がありますRecursiveDirectoryIterator

function getImageDirectory($iId) { 
    $oDirectory = new RecursiveDirectoryIterator("/path/to/images/"); 
    $oIterator = new RecursiveIteratorIterator($oDirectory); 
    foreach($oIterator as $oFile) { 
     if ($oFile->getFilename() == 'imageProductCode-' . $iId . '.jpg') { 
      return $oFile->getPath(); 
     } 
    } 
} 
+1

を提案する場所 – Gordon

+0

葉だけを返すことについては知らなかった。更新しました。 – enobrev

+0

邪悪な感謝の仲間! – Andy

0

あなたはすべてのあなたのコレクションをチェックすることができ:

$collections = array('collection1', 'collection2', 'collection3'); 

foreach ($collections as $collection) { 
    if (file_exists('/path/to/collections/'.$collection.'/'.$productCode.'.jpg')) { 
    ... do your thing ... 
    break; 
    } 
} 

カタログのサイズによっては、データベース(フラットファイルやMySQL)を作成するために、より高速であるかもしれません特定の製品コードの画像の場所を検索することができます。

+0

これは非常に良いアイデアのように見える、私はあなたがそのためのデータベースをしたい場合、私はsqliteの – Andy

+0

を一覧表示するスクリプトを追加することについてのあなたのポイントを取るにそれをラップカスタム 'FilterIterator'または' RecursiveRegexIterator'を使用してください。また、 'RecursiveIteratorIterator'のデフォルトの動作は葉のみを返すので、' isFile'のチェックは必要ありません。したがって、 '$ oFile'は常にファイルになります。 –

0

を使用することができます。あなたが従うしたい の主な方法:

  1. のopendir readdirの
  2. is_dir

is_fileあなたのイメージのルートにスタートは、すべての項目を確認してください。それがディレクトリの場合は、ディレクトリを確認します。 大規模なディレクトリや画像コレクションを見ているなら、上で示唆したように、unixコマンドかdbリンクのどちらかを調べたいと思うかもしれません。

もう1つの方法は、ディレクトリを論理的にイメージに接続して、どのディレクトリのイメージの名前(または他のプロパティ)から見えるようにするかです。

幸運、

Yishai

+0

Yishaiの情報をお寄せいただきありがとうございます。 – Andy

+0

SPL(と特にDirectoryIterators)はPHP5で追加されましたが、5.3以降は無効にできません。この回答を修正しないで、あなたの所に追加するだけです。 – enobrev

関連する問題