【问题标题】:PHP - Code to traverse a directory and get all the files(images)PHP - 遍历目录并获取所有文件(图像)的代码
【发布时间】:2010-08-31 10:40:10
【问题描述】:

我想写一个页面,将遍历指定目录....并获取该目录中的所有文件...

在我的情况下,该目录将只包含图像并显示带有链接的图像...

类似的东西

怎么做

附言该目录不会是用户输入..它将始终是同一个目录...

【问题讨论】:

标签: php directory traversal getfiles


【解决方案1】:
if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            echo "$file\n";
        }
    }
    closedir($handle);
}

使用readdir

【讨论】:

    【解决方案2】:
    <?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

    【讨论】:

      【解决方案3】:

      您需要使用scandir 函数来遍历目录中的文件列表。

      【讨论】:

        【解决方案4】:

        您好,您可以使用 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

        【讨论】:

          【解决方案5】:
          /**
          *  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;
              }
          

          【讨论】:

          • 可怕。看看迭代器和 SplFileInfo
          【解决方案6】:

          您可以像其他人建议的那样检查目录中的每个文件,或者您可以使用glob 根据扩展名识别文件。

          【讨论】:

            【解决方案7】:

            我使用了一些类似的东西:

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

            【讨论】:

              【解决方案8】:

              你也可以试试glob函数:

              $path = '/your/path/';
              $pattern = '*.{gif,jpg,jpeg,png}';
              
              $images = glob($path . $pattern, GLOB_BRACE);
              
              print_r($images);
              

              【讨论】:

                【解决方案9】:
                $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

                【讨论】:

                  【解决方案10】:

                  我将从创建一个递归函数开始:

                  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函数一次,它就会遍历所有的子文件夹,输出下面有链接的图片。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2011-04-07
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-03-05
                    • 1970-01-01
                    • 2015-12-30
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多