使用PHP获取目录中所有文件的名称

时间:2010-05-27 16:31:10

标签: php file directory filenames

出于某种原因,我通过以下代码继续获得文件名的“1”:

if (is_dir($log_directory))
{
    if ($handle = opendir($log_directory))
    {
        while($file = readdir($handle) !== FALSE)
        {
            $results_array[] = $file;
        }
        closedir($handle);
    }
}

当我回显$ results_array中的每个元素时,我得到一堆'1',而不是文件的名称。如何获取文件名?

16 个答案:

答案 0 :(得分:144)

不要打扰open / readdir并改为使用glob

foreach(glob($log_directory.'/*.*') as $file) {
    ...
}

答案 1 :(得分:42)

SPL样式:

foreach (new DirectoryIterator(__DIR__) as $file) {
  if ($file->isFile()) {
      print $file->getFilename() . "\n";
  }
}

检查DirectoryIteratorSplFileInfo类,了解可以使用的可用方法列表。

答案 2 :(得分:17)

您需要用括号括起$file = readdir($handle)

你走了:

$log_directory = 'your_dir_name_here';

$results_array = array();

if (is_dir($log_directory))
{
        if ($handle = opendir($log_directory))
        {
                //Notice the parentheses I added:
                while(($file = readdir($handle)) !== FALSE)
                {
                        $results_array[] = $file;
                }
                closedir($handle);
        }
}

//Output findings
foreach($results_array as $value)
{
    echo $value . '<br />';
}

答案 3 :(得分:12)

只需使用glob('*')即可。这是Documentation

答案 4 :(得分:10)

由于接受的答案有两个重要的缺陷,我正在为那些正在寻找正确答案的新来者发布改进的答案:

foreach (array_filter(glob('/Path/To/*'), 'is_file') as $file)
{
    // Do something with $file
}
  1. 有必要使用globe过滤is_file函数结果,因为它也可能会返回一些目录。
  2. 并非所有文件的名称都有.,因此*/*模式一般很糟糕。

答案 5 :(得分:6)

我有更小的代码:

$path = "Pending2Post/";
$files = scandir($path);
foreach ($files as &$value) {
    echo "<a href='http://localhost/".$value."' target='_blank' >".$value."</a><br/><br/>";
}

答案 6 :(得分:4)

这是由于运营商的优先权。尝试将其更改为:

while(($file = readdir($handle)) !== FALSE)
{
    $results_array[] = $file;
}
closedir($handle);

答案 7 :(得分:3)

在某些操作系统上,您获得. ...DS_Store,我们无法使用它们,所以让我们隐藏它们。

首先使用scandir()

开始获取有关文件的所有信息
// Folder where you want to get all files names from
$dir = "uploads/";

/* Hide this */
$hideName = array('.','..','.DS_Store');    

// Sort in ascending order - this is default
$files = scandir($dir);
/* While this to there no more files are */
foreach($files as $filename) {
    if(!in_array($filename, $hideName)){
       /* echo the name of the files */
       echo "$filename<br>";
    }
}

答案 8 :(得分:2)

glob()FilesystemIterator示例:

/* 
 * glob() examples
 */

// get the array of full paths
$result = glob( 'path/*' );

// get the array of file names
$result = array_map( function( $item ) {
    return basename( $item );
}, glob( 'path/*' ) );


/* 
 * FilesystemIterator examples
 */

// get the array of file names by using FilesystemIterator and array_map()
$result = array_map( function( $item ) {
    // $item: SplFileInfo object
    return $item->getFilename();
}, iterator_to_array( new FilesystemIterator( 'path' ), false ) );

// get the array of file names by using FilesystemIterator and iterator_apply() filter
$it = new FilesystemIterator( 'path' );
iterator_apply( 
    $it, 
    function( $item, &$result ) {
        // $item: FilesystemIterator object that points to current element
        $result[] = (string) $item;
        // The function must return TRUE in order to continue iterating
        return true;
    }, 
    array( $it, &$result )
);

答案 9 :(得分:1)

您可以尝试scandir(Path)功能。它快速而简单地实施

语法:

$files = scandir("somePath");

此函数将文件列表返回到数组中。

要查看结果,您可以尝试

var_dump($files);

foreach($files as $file)
{ 
echo $file."< br>";
} 

答案 10 :(得分:1)

列出目录和文件的另一种方法是使用此处回答的RecursiveTreeIteratorhttps://stackoverflow.com/a/37548504/2032235

可以在此处找到PHP中RecursiveIteratorIterator和迭代器的详尽说明:https://stackoverflow.com/a/12236744/2032235

答案 11 :(得分:0)

以下是showing all files in a folder

的更高级示例

答案 12 :(得分:0)

我只是使用这段代码:

<?php
    $directory = "Images";
    echo "<div id='images'><p>$directory ...<p>";
    $Files = glob("Images/S*.jpg");
    foreach ($Files as $file) {
        echo "$file<br>";
    }
    echo "</div>";
?>

答案 13 :(得分:0)

使用:

if ($handle = opendir("C:\wamp\www\yoursite/download/")) {

    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            echo "<b>" . preg_replace('/\\.[^.\\s]{3,4}$/', '', $entry) . "</b>";
        }
    }
    closedir($handle);
}

来源:http://chandreshrana.blogspot.com/2016/08/how-to-fetch-all-files-name-from-folder.html

答案 14 :(得分:0)

用于浏览目录中包含的所有文件的递归代码(&#39; $ path&#39;包含目录的路径):

function explore_directory($path)
{
    $scans = scandir($path);

    foreach($scans as $scan)
    {
        $new_path = $path.$scan;

        if(is_dir($new_path))
        {
            $new_path = $new_path."/";
            explore_directory($new_path);
        }
        else // A file
        {
            /*
                  Body of code
            */
        }
    }
}

答案 15 :(得分:0)

我为此创建的小东西:

function getFiles($path) {
    if (is_dir($path)) {
        $files = scandir($path);
        $res = [];
        foreach ($files as $key => $file) {
            if ($file != "." && $file != "..") {
                array_push($res, $file);
            }
        }
        return $res;
    }
    return false;
}