如何使用PHP检索列表中的目录上的文件

时间:2012-07-30 09:51:44

标签: php

我如何能够在特定目录中检索不同的文件扩展名。假设我有一个名为“downloads /”的文件夹,其中该文件夹内有不同类型的文件,如PDF,JPEG,DOC文件等。因此在我的PHP代码中,我希望检索这些文件,并列出文件名和文件扩展名。示例:里面的“downloads /”文件夹是不同的文件

downloads/

 - My Poem.doc
 - My Photographs.jpg
 - My Research.pdf

所以我想查看那些我可以获取文件名,文件扩展名和文件目录的文件。所以在视图中会是这样的

Title: My Poem
Type: Document
Link: [url here] 

Title: My Photographs
Type: Image
Link: [url here] 

Title: My Research
Type: PDF
Link: [url here] 

任何人都知道如何在PHP中做到这一点?非常感谢!

3 个答案:

答案 0 :(得分:3)

这很简单。说实话,我不知道你为什么不在php.net上搜索。他们为此得到了很多例子。请在此处查看:click

示例:

<?php

  function process_dir($dir,$recursive = FALSE) {
    if (is_dir($dir)) {
      for ($list = array(),$handle = opendir($dir); (FALSE !== ($file = readdir($handle)));) {
        if (($file != '.' && $file != '..') && (file_exists($path = $dir.'/'.$file))) {
          if (is_dir($path) && ($recursive)) {
            $list = array_merge($list, process_dir($path, TRUE));
          } else {
            $entry = array('filename' => $file, 'dirpath' => $dir);

 //---------------------------------------------------------//
 //                     - SECTION 1 -                       //
 //          Actions to be performed on ALL ITEMS           //
 //-----------------    Begin Editable    ------------------//

  $entry['modtime'] = filemtime($path);

 //-----------------     End Editable     ------------------//
            do if (!is_dir($path)) {
 //---------------------------------------------------------//
 //                     - SECTION 2 -                       //
 //         Actions to be performed on FILES ONLY           //
 //-----------------    Begin Editable    ------------------//

  $entry['size'] = filesize($path);
  if (strstr(pathinfo($path,PATHINFO_BASENAME),'log')) {
    if (!$entry['handle'] = fopen($path,r)) $entry['handle'] = "FAIL";
  }

 //-----------------     End Editable     ------------------//
              break;
            } else {
 //---------------------------------------------------------//
 //                     - SECTION 3 -                       //
 //       Actions to be performed on DIRECTORIES ONLY       //
 //-----------------    Begin Editable    ------------------//

 //-----------------     End Editable     ------------------//
              break;
            } while (FALSE);
            $list[] = $entry;
          }
        }
      }
      closedir($handle);
      return $list;
    } else return FALSE;
  }

  $result = process_dir('C:/webserver/Apache2/httpdocs/processdir',TRUE);

 // Output each opened file and then close
  foreach ($result as $file) {
    if (is_resource($file['handle'])) {
        echo "\n\nFILE (" . $file['dirpath'].'/'.$file['filename'] . "):\n\n" . fread($file['handle'], filesize($file['dirpath'].'/'.$file['filename']));
        fclose($file['handle']);
    }
  }

?>

答案 1 :(得分:0)

您可以使用glob&amp; pathinfo

<?php
foreach (glob(__DIR__.'/*') as $filename) {
    print_r(pathinfo($filename));
}
?>

答案 2 :(得分:0)

您将尝试此代码:

$Name = array();
$ext = array();
$downloadlink = array();
$dir = 'downloads'
while ($file= readdir($dir))
{

    if ($file!= "." && $file!= "..")
    {
         $temp = explode(".",$file);
         if (count($temp) > 1) 
            {
                $Name[count($Name)] = $temp[0];
                swich($ext)
                {
                    case "doc" :
                    {
                        $ext[count($ext)] = "Document"; 
                        break;
                    }
                    [...]
                    default :
                    {
                        $ext[count($ext)] = "Error"; 
                        break;
                    }
                }
                $downloadlink[count($downloadlink)] = "http://yourdomain.com/".$dir."/".$file;
            }
    }
}
closedir($dir);

for($aux = 0; $aux < count($Name); $aux++)
{
    echo "Name = " . $Name[$aux]."<br />
    Type = " . $ext[$aux]."<br/>
    Link = " . $downloadlink[$aux]."<br/>
    ";
}