PHP: Wyświetlanie listy plików znajdujących się w katalogu.

Jak wyświetlić listę plików z katalogu za pomocą PHP? Nic łatwiejszego! W PHP obsługa systemu plików została maksymalnie uproszczona.
Lista możliwych rozwiązań:

Thank you for reading this post, don't forget to subscribe!
  1. Korzystając z funkcji opendir i readdir:
    $katalog="/ścieżka_do_katalogu/";
    		$dir = opendir($katalog);
    while(false !== ($file = readdir($dir)))
      if($file != '.' && $file != '..') 
        echo $file . '<br />';
    
    
    
  2. Używając iteratorów (od PHP5):
     $katalog="/ścieżka_do_katalogu/";
    foreach(new DirectoryIterator($katalog) as $file)
      if(!$file->isDot())
        echo $file->getFilename() . '<br />';
     
  3. Korzystając z funkcji scandir:
     $katalog='/ścieżka_do_katalogu/';
    		 	
    		 	foreach(scandir($katalog) as $file)
      if($file != '.' && $file != '..')
        echo $file . '<br />';
  4. Wykorzystując klasę dir:
      	$katalog='/ścieżka_do_katalogu/';
    		 	
    		 	$dir = dir($katalog);
    while($file = $dir->read())
      if($file != '.' && $file != '..') 
        echo $file . '<br />';
    $dir->close();
  5. Za pomocą funkcji glob:
  6.  	
    		 foreach(glob('*', GLOB_BRACE) as $file)
      if($file != '.' && $file != '..') 
        echo $file . '<br />';

    Powyższy kod wyświetli pliki + foldery z obecnego katalogu. Aby pobrać je z folderu “katalog” należy:

     foreach(glob('katalog/*', GLOB_BRACE) as $file)

    Aby pobrać pliki tylko o określonych rozszerzeniach, np dla: *.jpg i *.gif:

     foreach(glob('katalog/{*.jpg,*.gif}', GLOB_BRACE) as $file)

Drobne uwagi do powyższych przykładów:

  • zamiast zapisywać ścieżkę dostępu do katalogu w zmiennej ($katalog=”/ścieżka_do_katalogu/”;) można bezpośrednio wpisać ją w funkcję używając apostrofu (”) czyli np:($dir = opendir(‘katalog’);)
  • co do “ścieżka_do_katalogu” – należy zwrócić uwagę jak jest wpisywany slash:
    • wpisując : katalog/ – wyświetli listę plików w katalogu podrzędnym:(jeśli taki istnieje)
    • wpisując : /katalog/ – różnice zobaczymy jeśli pracujemy na wirtualnym serwerze localhost – wpisując w ten sposób php na localhost wyświetli listę plików znajdujących się w katalogu c:\katalog, na serwerze wyświetli listę plików znajdującą się w www.nazwastrony.pl/katalog/ – jest to bezpośrednia ścieżka do katalogu
    • wpisując : ../katalog/ – w obu przypadkach wyświetli nam listę plików znajdującą się w katalogu serwera – jest to bezpośrednia ścieżka do katalogu

Inne przykłady zastosowań wyświetlania plików z katalogu:

  • Wybieranie losowego pliku z wybranego katalogu:
     
    $folder = opendir('../katalog/');//otwieramy folder do odczytu
    $i = 0;
    
    //wczytanie do tablicy nazwy wszystkich plików z katalogu
    while(false !=($plik = readdir($folder))){
    if($plik != "." && $plik != ".."){
    	$zmiana[$i]= $plik;
    	$i++;
    	}
    }
    closedir($folder);//zamykamy folder
    
    //Funkcja rand(), zwraca losową liczbę z podanego w parametrach przedziału. 
    //Natomiast funkcja count() przekazuje liczbę elementów tablicy.
    $losowy=rand(0,count($zmiana)-1);
    //wyświetlamy losowy plik
    echo $zmiana[$losowy];
    
    

    Dzięki temu przykładowi, można np w łatwy sposób wyświetlać losowe obrazki z danego katalogu: używając przy tym html’a itd..

  • wyświetlanie listy plików bez ich rozszerzenia:
     $directory="../katalog/";
    $dir=opendir($directory);
    $file_list="";
    while($file_name=readdir($dir))
        {
             if(($file_name!=".")&&($file_name!=".."))
            {
    //dzielimy nazwę pliku na dwie części za pomocą funkcji explode()
            	$file=explode('.',$file_name);
            	// zachowujemy nazwę w zmiennej
            $file_list.=$file[0].", ";
            }
        }
    
    closedir($dir);
    echo "$file_list";