dir

(PHP 4, PHP 5, PHP 7, PHP 8)

dirLiefert eine Instanz der Directory-Klasse

Beschreibung

dir(string $directory, ?resource $context = null): Directory|false

Ein pseudo-objektorientierter Mechanismus zum Lesen eines Verzeichnisses. Das in directory angegebene Verzeichnis wird geöffnet.

Parameter-Liste

directory

Das zu öffnende Verzeichnis.

context

Eine Stream-Kontext-Ressource.

Rückgabewerte

Gibt eine Instanz der Directory-Klasse zurück oder false im Falle eines Fehlers.

Changelog

Version Beschreibung
8.0.0 context ist nun nullable (akzeptiert den null-Wert).

Beispiele

Beispiel #1 dir()-Beispiel

Beachten Sie im nachfolgenden Beispiel, wie der Rückgabewert der Funktion Directory::read() überprüft wird. Es wird explizit getestet, ob der Rückgabewert identisch (den gleichen Wert und Datentyp hat, siehe Vergleichs-0peratoren) mit false ist, weil sonst jeder Verzeichniseintrag, der zu false ausgewertet wird, die Schleife abbricht.

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

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

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

Anmerkungen

Hinweis:

Die Reihenfolge der Verzeichniseinträge, die von der read-Methode zurückgegeben werden, ist systemabhängig.

add a note

User Contributed Notes 6 notes

up
8
synnus at gmail dot com
4 years ago
<?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 FilesystemIterator( PATH_ROOT . 'folder/', FilesystemIterator::SKIP_DOTS );?>
up
6
fordiman at gmail dot com
19 years ago
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
up
4
samuel dot l at mushicrew dot com
19 years ago
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.
up
3
Anonymous
19 years ago
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.
up
1
synnus at gmail dot com
3 years ago
<?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($path, FilesystemIterator::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 '';}?>
up
1
GUILLE@GARGANO
14 years ago
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++] = trim( substr($archivos,1,strpos($archivos," ",1)) );
  }
  fclose($rh);
  return $directorio;
}
?>
To Top