dir

(PHP 4, PHP 5)

dirReturn an instance of the Directory class

Description

Directory dir ( string $directory [, resource $context ] )

A pseudo-object oriented mechanism for reading a directory. The given directory is opened.

Parameters

directory

Directory to open

context

Note: Context support was added with PHP 5.0.0. For a description of contexts, refer to Streams.

Return Values

Returns an instance of Directory, or NULL with wrong parameters, or FALSE in case of another error.

Examples

Example #1 dir() example

Please note the fashion in which Directory::read()'s return value is checked in the example below. We are explicitly testing whether the return value is identical to (equal to and of the same type as - see Comparison Operators for more information) FALSE since otherwise, any directory entry whose name evaluates to FALSE will stop the loop.

<?php
$d 
dir("/etc/php5");
echo 
"Handle: " $d->handle "\n";
echo 
"Path: " $d->path "\n";
while (
false !== ($entry $d->read())) {
   echo 
$entry."\n";
}
$d->close();
?>

The above example will output something similar to:

Handle: Resource id #2
Path: /etc/php5
.
..
apache
cgi
cli

Notes

Note:

The order in which directory entries are returned by the read method is system-dependent.

Коментарии

This one's pretty nice.  After getting frustrated for hunting down .jpg files in my massive music collection (PHP would run out of memory), I thought there should be a preg_ls function.

function preg_ls ($path=".", $rec=false, $pat="/.*/") {
    // it's going to be used repeatedly, ensure we compile it for speed.
    $pat=preg_replace("|(/.*/[^S]*)|s", "\\1S", $pat);
    //Remove trailing slashes from path
    while (substr($path,-1,1)=="/") $path=substr($path,0,-1);
    //also, make sure that $path is a directory and repair any screwups
    if (!is_dir($path)) $path=dirname($path);
    //assert either truth or falsehoold of $rec, allow no scalars to mean truth
    if ($rec!==true) $rec=false;
    //get a directory handle
    $d=dir($path);
    //initialise the output array
    $ret=Array();
    //loop, reading until there's no more to read
    while (false!==($e=$d->read())) {
        //Ignore parent- and self-links
        if (($e==".")||($e=="..")) continue;
        //If we're working recursively and it's a directory, grab and merge
        if ($rec && is_dir($path."/".$e)) {
            $ret=array_merge($ret,preg_ls($path."/".$e,$rec,$pat));
            continue;
        }
        //If it don't match, exclude it
        if (!preg_match($pat,$e)) continue;
        //In all other cases, add it to the output array
        $ret[]=$path."/".$e;
    }
    //finally, return the array
    return $ret;
}

Not bad for a mere 18 lines, don't you think?

Example use:

foreach (preg_ls("/etc/X11", true, "/.*\.conf/i") as $file) echo $file."\n";

Output: 

/etc/X11/xkb/README.config
/etc/X11/xorg.conf-vesa
/etc/X11/xorg.conf~
/etc/X11/gui.conf
/etc/X11/xorg.conf
/etc/X11/xorg.conf-fbdev
2006-01-11 00:05:59
http://php5.kiev.ua/manual/ru/function.dir.html
Note that the dir object will use the default encoding for non-unicode programs on Windows with PHP 5.x.

So, if you have a file named with characters unsupported by the current default encoding, the dir->read() method will return a wrong entry.

<?php
/*
** This script is on the same directory than a file named with
** unsupported characters for the current default encoding.
*/
$d dir("./");
while(
false !== ($e $d->read()))
    echo 
$e '<br/>';
?>

This will print a "?" for every unsupported characters, and not the right file name. So take care if you check with is_file/is_dir right after enumerating.
2006-01-24 12:52:21
http://php5.kiev.ua/manual/ru/function.dir.html
Автор:
Regarding samuel's comment about the dir() function not supporting Unicode properly, it's all in the encoding. The function does NOT internally change Unicode characters into question marks (?), as I was first led to believe. If you simply try to output them in UTF-8, they'll show up just right.
2006-02-22 15:02:31
http://php5.kiev.ua/manual/ru/function.dir.html
Автор:
to get a dir of http://www.example.com/directory

<?php
function remotedir($dir)
{
 
$dir str_replace(" ""%20"html_entity_decode($dir));
  if ((
$rh fopen($dir'rb')) === FALSE) { return false; }
 
$i 0;
  while (!
feof($rh)) {
     
$archivos fgetss($rh);
     
$directorio[$i++] = trimsubstr($archivos,1,strpos($archivos," ",1)) );
  }
 
fclose($rh);
  return 
$directorio;
}
?>
2011-01-18 11:17:11
http://php5.kiev.ua/manual/ru/function.dir.html
<?php

   
// simple juste use FilesystemIterator 
   // and you can skip dot and duble dot
   // and use it in array
   // new FilesystemIterator( PATH , OPTIONS ) : array 

$array_file_list = new FilesystemIteratorPATH_ROOT 'folder/'FilesystemIterator::SKIP_DOTS );

?>
2021-05-26 15:35:03
http://php5.kiev.ua/manual/ru/function.dir.html
<?php

/*
  New recursive PHP8 
  gen array path with  FilesystemIterator
*/

$recurcive_path = [];
rdir(path$recurcive_path);
var_dump($recurcive_path);

function 
rdir(string $path, array &$recurcive_path): string
{
    if (
$path != '') {
       
$recurcive_path[] = $path;
       
$array_list iterator_to_array(new FilesystemIterator($pathFilesystemIterator::SKIP_DOTS));
        foreach (
$array_list as $name) {
           
$pathname $name->getpathname();
            if(
is_dir($pathname) && $name->getfilename()[0] != '.'){
               
$path rdir($pathname,$recurcive_path);
            }
        }
        return 
$path;
    }
    return 
'';
}

?>
2022-03-01 14:34:24
http://php5.kiev.ua/manual/ru/function.dir.html

    Поддержать сайт на родительском проекте КГБ