需要在目录-php中显示有限数量的文件名

For the below code I have multiple directories and files. I can display one filename per directory(Which is good with the "BREAK").

<?php
    $dir = "/images/";
    $i=0;
    // Open a directory, and read its contents
    if (is_dir($dir)){
        if ($dh = opendir($dir)){
            while (($file = readdir($dh)) !== false){
                echo "filename:" . $file . "<br>";
                break;
                //---- if ($i>=5) { break; }
            }
            closedir($dh);
        }
    }
?>

With if ($i>=5) { break; } I can still display 5 filenames but it reads only one directory.

I want to display at least 5 file names from all directories, how can I do it?

You don't have to break it, you can just skip it. And in doing so, you have to use continue instead.

$dir = "/images/";
$i=0;

// Open a directory, and read its contents
if (is_dir($dir)){
    if ($dh = opendir($dir)){
        while (($file = readdir($dh)) !== false){
            echo "filename:" . $file . "<br>";

            if ($i>=5)
                   continue;

        }
        closedir($dh);
    }
}

Here is also another scenario. Because you mentioned that you have many directories but you only show one main directory, I am guessing that the directories you've mentioned were inside the /images/ directory.

$dir = "images/";
$i=1;

// Open a directory, and read its contents
if (is_dir($dir)){
    if ($dh = opendir($dir)){
        while (($file = readdir($dh)) !== false){

            $j=1;

            if (is_dir($file)) {
                if ($internalDir = opendir($file)) {
                    while (($internalFile = readdir($internalDir)) !== false) {
                        echo $file."->filename: ".$internalFile."<br>";

                        if ($j>=5)
                               continue;

                        $j++;
                    }

                    closedir(opendir($file));
                }

            } else {
                echo "filename:" . $file . "<br>";

                if ($i>=5)
                   continue;

                $i++;
            }


        }
        closedir($dh);
    }
}

Read more about continue here: http://php.net/manual/en/control-structures.continue.php

Use the scandir function.

array scandir ( string $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, resource $context ]] )

or

If you are using unix you could also do a system call and run the following command.

ls /$dir | head -5

$dir is the directory and -5 is the number filenames in the directory.

Since you said that you have multiple directory's, I rewrote your code a bit:

(Here I first loop through all directory's with array_map() then I get all files from each directory with glob(). After this I just limit the files per directory with array_slice() and at the end I simply print all file names)

<?php

    $directorys = ["images/", "xy/"];
    $limit = 3;

    //get all files
    $files = array_map(function($v){
        return glob("$v*.*");
    }, $directorys);

    //limit files per directory
    $files = array_map(function($v)use($limit){
        return array_slice($v, 0, $limit);
    }, $files);

    foreach($files as $directory) {
        echo "<b>Directory</b><br>";
        foreach($directory as $file)
            echo "$file<br>";
        echo "<br><br>";
    }

?>