2011-08-20 8 views

Odpowiedz

23

Są obecne (.) i rodzic (..) katalogów. Są one obecne we wszystkich katalogach i są używane do odnoszenia się do samego katalogu i jego bezpośredniego rodzica.

4

W konwencji Unix. jest linkiem do bieżącego katalogu, gdy ... jest linkiem do katalogu nadrzędnego. Obydwa istnieją jako plik w indeksie katalogu.

+0

Czy można zacytować źródło, które mówi, że jest to konwencja UNIX? DOS i Windows też mają '.' i' ..', prawda? – phihag

+2

Windows też to ma, to nie jest specyficzne dla Uniksa. – Mat

+0

Jest to konwencja uniksowa; to nie przeszkadza, aby był on także konwencją DOS i Windows. –

83

Istnieją dwa wpisy obecne w każdym liście katalogów:

  • . odnosi się do aktualnego katalogu
  • .. odnosi się do katalogu nadrzędnego (lub korzenia, jeśli bieżący katalog jest korzeniem)

można usunąć je z wynikami filtrując je z wynikami scandir:

$allFiles = scandir(__DIR__); // Or any other directory 
$files = array_diff($allFiles, array('.', '..')); 
+8

Nice. Można to również skondensować w jednej linii: '$ files = array_diff (scandir (__ DIR__), array ('.', '..'));' (patrz http://www.electrictoolbox.com/php-scandir- find-files /). – SharpC

1

Aby usunąć . i .. z scandir korzystania z funkcji:

function scandir1($dir) 
{ 
    return array_values(array_diff(scandir($dir), array('..', '.'))); 
} 

Komenda array_values re indeksów tablicy tak, że zaczyna się od 0. Jeśli nie trzeba tablicę ponownego indeksowania, a następnie zaakceptowana odpowiedź zadziała dobrze. Po prostu: array_diff(scandir($dir), array('..', '.')).

Powiązane problemy