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来写也是相同的。
参考技术APHP的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));
?>
$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是文件,是判断是目录还是文件的吧,不是返回扩展名啊。
$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如何读取某目录下的所有同类型文件的主要内容,如果未能解决你的问题,请参考以下文章