scandir( $path) returns the searched result in array. If you want to implement recursive scan for sub directories, you can implement it by checking filetype().

$result = scandir(directory, order, context)

  • it returns false on failure.


<?php

$r = scandir("/etc/");
print_r( $r);

?>


Below is another example to find files in regexp.

// Programmed by Chun Kang - 2020-03-27
function findfiles( $path, $regexp="", $order=0)
{
    $r = scandir( $path, $order); // $order: 0->ascending / 1->descending
    if ($r==false) $ret=$r;
    else
    {
        $ret=array();
        $i=count($r)-1;
        for($i=0; $i<count($r); $i++)
        {
            if (
            		(($regexp=="") || preg_match('/' . $regexp . '/', $r[$i]))
            		&& strlen($r[$i])
            		&& $r[$i]!='.'
            		&& $r[$i]!='..'
            	) $ret[]=$r[$i];
        }
    }
    return $ret;
}

$r = findfiles( "/repostirory", "qsok(.*)mysql");
print_r($r);

Below is another example to find files including sub directories combined with regexp:

function findfiles( $path, $regexp=NULL, $order=0)
{
        $ret = array();

        $searchEntry = array();
        $searchEntry []= $path;

        $hasRegexp = strlen($regexp);

        $entry_cnt=0;
        while( $entry_cnt<count($searchEntry))
        {
                $entryPath = $searchEntry[$entry_cnt++];

                echo "scan - {$entryPath}\n";
                $r = scandir( $entryPath, $order); // $order: 0->ascending / 1->descending
                foreach($r as $filename)
                {
                        $full_path = $entryPath . "/" . $filename;
                        echo "[{$filename}] - {$full_path}\n";
                        if (($filename!=".") && ($filename!="..")) 
                        {
                                if ( filetype( $full_path) == "dir") $searchEntry []= $full_path;
                                else if (
                                                (!$hasRegexp || preg_match('/' . $regexp . '/', $filename))
                                                && strlen($filename)
                                        ) $ret[]=str_replace( $path . "/", "", $full_path);        
                        }
                }
        }

        return (count($ret) ? $ret: NULL);
}