PHP - код для обхода каталога и получения всех файлов (изображений) - PullRequest
0 голосов
/ 31 августа 2010

Я хочу написать страницу, которая будет проходить через указанный каталог .... и получить все файлы в этом каталоге ...

в моем случае каталог будет содержать только изображения и отображать изображения с их ссылками ...

как то так

Example

Как это сделать

p.s. каталог не будет введен пользователем .. он всегда будет одним и тем же каталогом ...

Ответы [ 10 ]

9 голосов
/ 31 августа 2010
if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            echo "$file\n";
        }
    }
    closedir($handle);
}

использование readdir

4 голосов
/ 31 октября 2010
<?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 />";
  }
 }
} 
?>

источник: phpacademy.org

2 голосов
/ 31 августа 2010

Вы можете использовать функцию scandir , чтобы просмотреть список файлов в каталоге.

1 голос
/ 01 сентября 2010

Привет, вы можете использовать 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 />';
}

Если вы хотите передавать каталоги рекурсивно: http://php.net/manual/en/class.recursivedirectoryiterator.php

0 голосов
/ 18 марта 2014

Я бы начал с создания рекурсивной функции:

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>";
            }
        }
    }
}

Параметр $ dir должен иметь следующий формат: "/ path /" или "/ path / to / files /"

По сути, просто не включайте корень сервера, потому что я уже сделал это ниже, используя $ _SERVER ['DOCUMENT_ROOT'].

Итак, в конце просто вызовите функцию recurseDir, которую мы простосделанный в вашем коде один раз, и он будет проходить через любые подпапки и выводить изображение со ссылкой под ним.

0 голосов
/ 31 августа 2010

Вы также можете попробовать функцию glob :

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

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

print_r($images);
0 голосов
/ 31 августа 2010

Я использую что-то вроде:

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 голосов
/ 31 августа 2010

Вы, как и другие, могли бы проверить каждый файл в каталоге, или вы могли бы использовать glob для идентификации файлов на основе расширения.

0 голосов
/ 31 августа 2010
/**
*  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( '&nbsp;', ( $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;
    }
0 голосов
/ 31 августа 2010
$dir = "/etc/php5/";

// Откройте известный каталог и перейдите к чтению его содержимого

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

Для дальнейшего использования: http://php.net/manual/en/function.opendir.php

...