ls() - Return Folder Contents
The ls() function will take a pattern and a folder as the argument and go through it(recursively if needed)and return the list of all files in that folder.
Arguments
- $pattern
- The first argument is the pattern(or the file mask) to look out for. Example: ls("*.html"). This supports any pattern supported by the glob function. This is an optional argument - if nothing is given, it defaults to "*". Some possible values...
* Matches everything. *.php All files with the extension php *.{php,html} Files with extension 'php' or 'html' file[1-3].php It could match file1.php, file2.php and file3.php - $folder
- The path of the directory of which directory list you want. This is an optional argument. If empty, the function will assume the value to be the current folder.
- $recursively
- The function will traverse the folder tree recursively if this is true. Defaults to false.
- $options
- An array of values 'return_files' or 'return_folders' or both. This decides what must be returned.
Returned Value
A flat array with the path of all the files(no folders) that matches the condition given. An example is...
Array
(
[0] => 1.php
[1] => 2.php
[2] => 3.txt
[3] => 4.txt
[4] => 5 5.txt
[5] => 6/
[6] => 6/8.css
[7] => 6/9.html
[8] => 7/
[9] => 7/10.net.txt
[10] => 7/11.php
)
Code
<?php /** * This funtion will take a pattern and a folder as the argument and go thru it(recursivly if needed)and return the list of * all files in that folder. * Link : http://www.bin-co.com/php/scripts/filesystem/ls/ * Arguments : $pattern - The pattern to look out for [OPTIONAL] * $folder - The path of the directory of which's directory list you want [OPTIONAL] * $recursivly - The funtion will traverse the folder tree recursivly if this is true. Defaults to false. [OPTIONAL] * $options - An array of values 'return_files' or 'return_folders' or both * Returns : A flat list with the path of all the files(no folders) that matches the condition given. */ function ls($pattern="*", $folder="", $recursivly=false, $options=array('return_files','return_folders')) { if($folder) { $current_folder = realpath('.'); if(in_array('quiet', $options)) { // If quiet is on, we will suppress the 'no such folder' error if(!file_exists($folder)) return array(); } if(!chdir($folder)) return array(); } $get_files = in_array('return_files', $options); $get_folders= in_array('return_folders', $options); $both = array(); $folders = array(); // Get the all files and folders in the given directory. if($get_files) $both = glob($pattern, GLOB_BRACE + GLOB_MARK); if($recursivly or $get_folders) $folders = glob("*", GLOB_ONLYDIR + GLOB_MARK); //If a pattern is specified, make sure even the folders match that pattern. $matching_folders = array(); if($pattern !== '*') $matching_folders = glob($pattern, GLOB_ONLYDIR + GLOB_MARK); //Get just the files by removing the folders from the list of all files. $all = array_values(array_diff($both,$folders)); if($recursivly or $get_folders) { foreach ($folders as $this_folder) { if($get_folders) { //If a pattern is specified, make sure even the folders match that pattern. if($pattern !== '*') { if(in_array($this_folder, $matching_folders)) array_push($all, $this_folder); } else array_push($all, $this_folder); } if($recursivly) { // Continue calling this function for all the folders $deep_items = ls($pattern, $this_folder, $recursivly, $options); # :RECURSION: foreach ($deep_items as $item) { array_push($all, $this_folder . $item); } } } } if($folder) chdir($current_folder); return $all; }