php如何读取某目录下的所有同类型文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php如何读取某目录下的所有同类型文件相关的知识,希望对你有一定的参考价值。

假设我Album文件夹里有许多XXX.jpg, YYY.jpg, ZZZ.png, aaa.txt
如何读取后缀为jpg的文件总数
谢谢了!
我对php不熟用,现在要用

PHP使用函数opendir、readdir、closedir来实现文件夹的操作,下面以一个最基本的例子来作为入门介绍:

<?php
//获取某目录下所有文件、目录名(不包括子目录下文件、目录名)  
    $dir=\'C:/Users/\';
    $handler = opendir($dir);  
    while (($filename = readdir($handler)) !== false) //务必使用!==,防止目录下出现类似文件名“0”等情况  
        if ($filename != "." && $filename != "..")   
                $files[] = $filename ;  
             
         
      
    closedir($handler);  
       
//打印所有文件名  
    foreach ($filens as $value)   
        echo $value."<br />";  
      
?>

上面的代码显示c:\\users文件夹里面的所有的文件和文件夹,忽略.和..两个特殊含义的文件夹,程序把所有文件和文件夹名称扫描保存到数组里面,然后显示。


如果你需要对文件进行过滤,例如只处理*.xls文件,可以在过滤.和..的地方添加代码。例如:

if (substr($filename,-4)==\'.xls\')


当你理解了上面的代码之后,你就能编写扫描子文件夹、以及子 文件夹里面文件的方法了。基本思路是使用递归,下面我给出一个简单的例子:

function get_allfiles($path,&$files)   
    if(is_dir($path))  
        $dp = dir($path);  
        while ($file = $dp ->read())  
            if($file !="." && $file !="..")  
                get_allfiles($path."/".$file, $files);  
              
          
        $dp ->close();  
      
    if(is_file($path))  
        $files[] =  $path;  
      
  
     
function get_filenamesbydir($dir)  
    $files =  array();  
    get_allfiles($dir,$files);  
    return $files;  
  
     
$filenames = get_filenamesbydir("c:/users/");  
//打印所有文件名,包括路径  
foreach ($filenames as $value)   
    echo $value."<br />";  

这个例子使用dir类来编写,实际上用opendir、readdir、closedir来写也是相同的。

参考技术A

PHP的glob() 函数返回匹配指定模式的文件名或目录。

该函数返回一个包含有匹配文件 / 目录的数组。如果出错返回 false。

语法

glob(pattern,flags)

参数

   

描述

 file    
   必需。规定检索模式。    
 

 
size    
   可选。规定特殊的设定。


GLOB_MARK - 在每个返回的项目中加一个斜线

GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序)

GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式

GLOB_NOESCAPE - 反斜线不转义元字符

GLOB_BRACE - 扩充 a,b,c 来匹配 'a','b' 或 'c'

GLOB_ONLYDIR - 仅返回与模式匹配的目录项

GLOB_ERR - 停止并读取错误信息(比如说不可读的目录),默认的情况下忽略所有错误


注释:GLOB_ERR 是 PHP 5.1 添加的。

例子 1

<?php
$a = glob("*.txt");
print_r(count($a));
?>

   

参考技术B <?php

$files = glob('*.jpg'); // 其他文件做类似修改,比如 *.png, *.txt等。。有目录请添加绝对目录。比如:c:/album/*.jpg
echo 'total : ' , count($files); // $files是一个文件数组。

?>本回答被提问者采纳

PHP读取目录下所有文件

读取名为DD的目录下的所有文件(假设要写的这段PHP代码文件和DD在同一目录,不是在DD下哦)。注意:DD下还有几个子目录(比如有a,ab,aii,dec4个子目录,还有几个文本文件和DOC文件)。
读取所有文件后,取得文件名,文件路径,文件修改时间,文件的扩展名,在页面输出,最后用&分隔存入TXT文件。
我是新人,我已经按照上面的要求建好文件和目录了,需要可以运行出结果的代码。便于理解。
FILETYPE返回的是dir和file,dir是目录,file是文件,是判断是目录还是文件的吧,不是返回扩展名啊。

php中读取目录下的文件名的方式确实不少,最简单的是scandir,具体代码如下:
$dir="./目录名/";
$file=scandir($dir);
print_r($file);
参考技术A 1楼的不错,但是有点小BUG哦。
不过过滤应该在is_dir之后,不然连名字以.php结尾的目录也会被忽略掉。要记得目录名中是可以有点号的。
参考技术B 希望你下载个手册看看,上边有很多这种例子,手册里搜索readdir

以下来自手册:
function ls($dir, $mask /*.php$|.txt$*/)

static $i = 0;
$files = Array();
$d = opendir($dir);
while ($file = readdir($d))

if ($file == '.' || $file == '..' || eregi($mask, $file) ) continue;
if (is_dir($dir.'/'.$file))

$files += ls($dir.'/'.$file, $mask);
continue;

$files[$i++] = $dir.'/'.$file;

return $files;

$f = ls('E:/www/mymoney/lsdu', ".php$" /*no spaces*/);
//这里第二个参数代表不读取.php文件
2楼说的不错,不过有几个用.php等字符做文件夹的名字呢?
文件扩展名:请使用函数filetype 修改时间:filemtime
恩,我想错了
那你这样取:
在$files[$i++] = $dir.'/'.$file;这一行后边加上
$extend = pathinfo($file);
echo strtolower($extend["extension"]),'<br/>';本回答被提问者和网友采纳

以上是关于php如何读取某目录下的所有同类型文件的主要内容,如果未能解决你的问题,请参考以下文章

在php中, 如何动态读取目录文件夹下的图片?

php如何显示,排列指定文件夹中所有文件夹名

Java 如何读取目录下的文件内容

CMD命令下如何批处理依次某目录下的所有文件

php如何获取目录下所有文件名

PHP如何读出当前目录下所有文件?