2010-11-18 8 views
1

Je suis coincé avec ce qui suit, donc toute aide serait appréciée.Trouver un fichier dans un dossier spécifique avec des sous-dossiers en utilisant PHP

J'ai un arbre de dossier comme suit:

images/collections/ 

Dans les collections folder il pourrait y avoir de nombreux sous-dossiers

images/collections/collection1, images/collections/collection2 

Les images sont nommés comme

imageProductCode-something.jpg 

Ce que je suis en train faire est de passer une variable qui est mon code de produit à un script qui trouve ensuite le fichier dans l'un des dossiers et retourne son chemin ...

images/collections/collection3/imageProductCode-something.jpg 

Répondre

0

Vous pouvez utiliser le 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

l'envelopper dans un Personnalisé 'FilterIterator' ou utilisez un' RecursiveRegexIterator' et vous obtenez mon upvote. De plus, vous n'avez pas besoin de vérifier 'isFile' car le comportement par défaut de' RecursiveIteratorIterator' est de ne renvoyer que des feuilles, donc '$ oFile' sera toujours des fichiers. – Gordon

+0

Je ne savais pas qu'il retournait des feuilles seulement. actualisé. – enobrev

+0

Wicked merci compagnon! – Andy

0

Vous pouvez vérifier toutes vos collections:

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

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

En fonction de la taille de votre catalogue, il pourrait être plus rapide pour créer une base de données (MySQL ou flatfile) pour rechercher l'emplacement de l'image pour un code de produit spécifique.

+0

Cela ressemble à une très bonne idée, je prends votre point sur l'ajout d'un script à la liste des emplacements – Andy

+0

si vous souhaitez base de données pour cela, je suggère sqlite –

0

Si vous utilisez une version de PHP qui est < 5.3, vous devrez peut-être écrire la récursion vous. méthodes principales de votre souhaitez suivre:

  1. opendir
  2. readdir
  3. is_dir
  4. is_file

Démarrer à la racine de vos images, vérifiez chaque entrée. Si c'est un répertoire, vérifiez le répertoire. On dirait que beaucoup de travail, donc si vous regardez des répertoires et des collections d'images volumineux, vous voudrez peut-être regarder dans la commande unix ou la liaison db, comme suggéré ci-dessus.

Une autre façon serait d'avoir les répertoires connectés logiquement aux images, de sorte que vous puissiez dire à partir du nom (ou d'une autre propriété) de l'image dans quel répertoire regarder.

Bonne chance,

Yishai

+0

Merci pour l'information Yishai ... – Andy

+0

Le SPL (et spécifiquement DirectoryIterators) ont été ajoutés en PHP5, bien qu'ils ne puissent plus être désactivés après 5.3. Ne pas corriger cette réponse, juste ajouter à votre point. – enobrev

Questions connexes