dir

(PHP 4, PHP 5, PHP 7)

dirВозвращает экземпляр класса Directory

Описание

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

Псевдо-объектно-ориентированный механизм для чтения каталога. Переданный параметром directory каталог открывается.

Список параметров

directory

Каталог для открытия

context

Замечание: Поддержка контекста была добавлена в PHP 5.0.0. Для описания контекстов смотрите раздел Потоки.

Возвращаемые значения

Возвращает экземпляр класса Directory, NULL при неверных параметрах, и FALSE в случае другой ошибки.

Примеры

Пример #1 Пример использования dir()

Пожалуйста, обратите внимание на способ, которым осуществляется проверка значения, возвращаемого Directory::read() в примере, приведенном ниже. В этом примере явно проводится проверка значения на идентичность (выражения идентичны, когда они равны и являются одного типа - за более подробной информацией обратитесь к главе Операторы сравнения) значению FALSE, поскольку в ином случае, любой элемент каталога, чье имя может быть выражено как FALSE, остановит цикл.

<?php
$d 
dir("/etc/php5");
echo 
"Дескриптор: " $d->handle "\n";
echo 
"Путь: " $d->path "\n";
while (
false !== ($entry $d->read())) {
   echo 
$entry."\n";
}
$d->close();
?>

Результатом выполнения данного примера будет что-то подобное:

Дескриптор: Resource id #2
Путь: /etc/php5
.
..
apache
cgi
cli

Примечания

Замечание:

Порядок, в котором метод "read" возвращает элементы каталога, зависит от операционной системы.

Коментарии

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

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