2010-08-31 32 views
0

Je veux écrire une page qui traversera un répertoire spécifié .... et obtenir tous les fichiers dans ce répertoire ...PHP - Code pour parcourir un répertoire et obtenir tous les fichiers (images)

dans mon cas, le répertoire ne contient que des images et afficher les images avec leurs liens ...

quelque chose comme ça

Example

Comment le faire

p.s. le répertoire ne sera pas l'entrée de l'utilisateur .. il sera toujours le même répertoire ...

+1

duplication possible de [Charger la liste d'images du dossier] (http://stackoverflow.com/questions/758594/load-list-of-image-from-folder) et [beaucoup plus] (http: // stackoverflow .com/search? q = get + tout + images + dans + un + dossier + php) – Gordon

+1

* (apparenté) * http://stackoverflow.com/questions/3563863/read-files-in-folder/3564311#3564311 – Gordon

Répondre

0
/** 
* function get files 
* @param $path string = path to fine files in 
* @param $accept array = array of extensions to accept 
* @param currentLevel = 0, stopLevel = 0 
* @return array of madmanFile objects, but you can modify it to 
* return whatever suits your needs. 
*/ 

    public static function getFiles($path = '.', $accept, $currentLevel = 0, $stopLevel = 0){ 

      $path = trim($path);     //trim whitespcae if any 
      if(substr($path,-1)=='/'){$path = substr($path,0,-1);} //cutoff the last "/" on path if provided 
      $selectedFiles = array(); 
      try{ 
        //ignore these files/folders 
        $ignoreRegexp = "/\.(T|t)rash/"; 
        $ignore = array('cgi-bin', '.', '..', '.svn'); 
        $dh = @opendir($path); 
        //Loop through the directory 
        while(false !== ($file = readdir($dh))){ 
          // Check that this file is not to be ignored 
          if(!in_array($file, $ignore) and !preg_match($ignoreRegexp,$file)){ 
          $spaces = str_repeat(' ', ($currentLevel * 4)); 
            // Its a directory, so we need to keep reading down... 
            if(is_dir("$path/$file")){ 
              //merge current selectFiles array with recursion return which is 
              //another array of selectedFiles 
              $selectedFiles = array_merge($selectedFiles,MadmanFileManager::getFiles("$path/$file", $accept, ($currentLe$ 
            } else{ 
              $info = pathinfo($file); 
              if(in_array($info['extension'], $accept)){ 
                $selectedFiles[] = new MadmanFile($info['filename'], $info['extension'], MadmanFileManager::getSize($ 

              }//end if in array 
            }//end if/else is_dir 
          } 
        }//end while 
        closedir($dh); 
        // Close the directory handle 
      }catch (Exception $e){ 
        echo 'Caught exception: ', $e->getMessage(), "\n"; 
      } 

      return $selectedFiles; 
    } 
+2

Horrible. Jetez un oeil à Iterators et SplFileInfo – Gordon

+0

J'ai la même fonction implémentée de cette façon aussi ... – Chris

2

Vous voudrez utiliser la fonction scandir pour parcourir la liste des fichiers dans le répertoire.

9
if ($handle = opendir('.')) { 
    while (false !== ($file = readdir($handle))) { 
     if ($file != "." && $file != "..") { 
      echo "$file\n"; 
     } 
    } 
    closedir($handle); 
} 

utilisation readdir

+1

+1, pour la réponse. –

0
$dir = "/etc/php5/"; 

// Ouvrez un répertoire connu et passez à lire son contenu

if (is_dir($dir)) { 
    if ($dh = opendir($dir)) { 
     while (($file = readdir($dh)) !== false) { 
      echo "filename: $file : filetype: " . filetype($dir . $file) . "\n"; 
     } 
     closedir($dh); 
    } 
} 

Pour plus de références: http://php.net/manual/en/function.opendir.php

0

Vous pourriez, comme d'autres, vous suggérer de vérifier chaque fichier dans le répertoire, ou vous pouvez utiliser glob pour identifier les fichiers basés sur l'extension.

0

J'utilise quelque chose le long des lignes de:

if ($dir = dir('images')) 
{  
    while(false !== ($file = $dir->read())) 
    { 
     if (!is_dir($file) && $file !== '.' && $file !== '..' && (substr($file, -3) === 'jpg' || substr($file, -3) === 'png' || substr($file, -3) === 'gif')) 
     { 
      // do stuff with the images 
     } 
    } 
} 
else { echo "Could not open directory"; } 
0

Vous pouvez également essayer la fonction glob:

$path = '/your/path/'; 
$pattern = '*.{gif,jpg,jpeg,png}'; 

$images = glob($path . $pattern, GLOB_BRACE); 

print_r($images); 
1

Salut, vous pouvez utiliser DirectoryIterator

try { 
    $dir = './'; 
    /* @var $Item DirectoryIterator */ 
    foreach (new DirectoryIterator($dir) as $Item) { 
     if($Item->isFile()) { 
      echo $Item->getFilename() . "\n"; 
     } 
    } 
} catch (Exception $e) { 
    echo 'No files Found!<br />'; 
} 

Si vous voulez passer les répertoires récursivement: http://php.net/manual/en/class.recursivedirectoryiterator.php

4
<?php 
//define directory 
$dir = "images/"; 
//open directory 
if ($opendir = opendir($dir)){ 
//read directory 
while(($file = readdir($opendir))!= FALSE){ 
    if($file!="." && $file!= ".."){ 
    echo "<img src='$dir/$file' width='80' height='90'><br />"; 
    } 
} 
} 
?> 

source: phpacademy.org

0

Je commencerais par créer une fonction récursive:

function recurseDir ($dir) { 

    // open the provided directory 
    if ($handle = opendir($_SERVER['DOCUMENT_ROOT'].$dir)) { 

     // we dont want the directory we are in or the parent directory 
     if ($entry !== "." && $entry !== "..") { 

      // recursively call the function, if we find a directory 
      if (is_dir($_SERVER['DOCUMENT_ROOT'].$dir.$entry)) { 

       recurseDir($dir.$entry); 
      } 
      else { 

       // else we dont find a directory, in which case we have a file       
       // now we can output anything we want here for each file 
       // in your case we want to output all the images with the path under it 
       echo "<img src='".$dir.$entry."'>"; 
       echo "<div><a href='".$dir.$entry."'>".$dir.$entry."</a></div>"; 
      } 
     } 
    } 
} 

Le répertoire de $ param doit être dans le format suivant: "/ chemin /" ou "/ path/to/files /"

Fondamentalement, n'incluez pas la racine du serveur, car je l'ai déjà fait ci-dessous en utilisant $ _SERVER ['DOCUMENT_ROOT ']. Donc, à la fin, appelez simplement la fonction recurseDir que nous venons de faire dans votre code, et elle traversera tous les sous-dossiers et affichera l'image avec le lien en dessous.