目录中每个文件的循环代码

目录中每个文件的循环代码

问题描述:

我有一个图片目录,我想循环浏览并对其进行一些文件计算。它可能只是缺乏睡眠,但我将如何使用PHP来查看给定的目录,并使用某种for循环遍历每个文件?目录中每个文件的循环代码

谢谢!

scandir

$files = scandir('folder/'); 
foreach($files as $file) { 
    //do your work here 
} 

glob可能更适合您的需求更好地:

$files = glob('folder/*.{jpg,png,gif}', GLOB_BRACE); 
foreach($files as $file) { 
    //do your work here 
} 
+11

喜欢glob()函数,从来没有见过一个之前。谢谢! – Chiggins 2011-05-27 17:34:46

+0

'$ files'变量是否用于避免在'foreach'循环中多次调用'scandir()'?或者我可以直接嵌入它而没有任何副作用? – Zero3 2015-05-10 15:57:38

+1

@零3,该变量仅用于可读性。 PHP将始终与任何foreach循环中的数组副本一起工作,这意味着scandir()只会被调用一次。 (因为PHP使用copy-on-write,所以你不会因为这个“复制”而出现任何性能问题)。是的,您可以嵌入scandir()调用,而不会有任何性能缺陷。 – 2015-05-11 12:07:09

尝试GLOB()

$dir = "/etc/php5/*"; 

// Open a known directory, and proceed to read its contents 
foreach(glob($dir) as $file) 
{ 
    echo "filename: $file : filetype: " . filetype($file) . "<br />"; 
} 
+0

删除他们的文件类型不起作用,它返回'文件'。 – Ajibola 2013-03-22 10:22:27

+0

@Ajibola如果我们在说一些不起作用之前检查文档,对吧? 'filetype()'返回文件的类型。因此可能的结果是'file,dir,char,block,...'。如果你想知道文件的内容类型,你可以使用'mime_content_type()'。 – Vallentin 2015-07-24 09:08:18

中查找功能glob()

<?php 
$files = glob("dir/*.jpg"); 
foreach($files as $jpg){ 
    echo $jpg, "\n"; 
} 
?> 

查看DirectoryIterator班。

从该网页上的评论之一:

// output all files and directories except for '.' and '..' 
foreach (new DirectoryIterator('../moodle') as $fileInfo) { 
    if($fileInfo->isDot()) continue; 
    echo $fileInfo->getFilename() . "<br>\n"; 
} 

的递归版本是RecursiveDirectoryIterator

+0

这应该是最好的答案,比scandir或glob更有用和更现代的方法 – 2017-05-26 13:26:36

在foreach循环中使用glob函数来执行任何选项。我还在下面的例子中使用了file_exists函数来检查目录是否存在,然后再继续。

$directory = 'my_directory/'; 
$extension = '.txt'; 

if (file_exists($directory)) { 
    foreach (glob($directory . '*' . $extension) as $file) { 
     echo $file; 
    } 
} 
else { 
    echo 'directory ' . $directory . ' doesn't exist!'; 
}