Podobno mamy folder /images/
, ma on kilka plików w środku.Jak uzyskać nazwy plików?
i skrypt /scripts/listing.php
Jak możemy uzyskać nazwy wszystkich plików wewnątrz folderu /images/
w listing.php
?
Dzięki.
Podobno mamy folder /images/
, ma on kilka plików w środku.Jak uzyskać nazwy plików?
i skrypt /scripts/listing.php
Jak możemy uzyskać nazwy wszystkich plików wewnątrz folderu /images/
w listing.php
?
Dzięki.
<?php
if ($handle = opendir('/path/to/files')) {
echo "Directory handle: $handle\n";
echo "Files:\n";
/* This is the correct way to loop over the directory. */
while (false !== ($file = readdir($handle))) {
echo "$file\n";
}
/* This is the WRONG way to loop over the directory. */
while ($file = readdir($handle)) {
echo "$file\n";
}
closedir($handle);
}
?>
Patrz: readdir()
Korzystanie albo scandir
lub dir
sprawia, że ten problem trywialny. Aby uzyskać wszystkie pliki w katalogu z wyjątkiem szczególnych plików .
i ..
w tablicy o indeksach począwszy od 0
można połączyć scandir
z array_diff
i array_merge
:
$files = array_merge(array_diff(scandir($dir), Array('.','..')));
// $files now contains the filenames of every file in the directory $dir
Oto metoda przy użyciu klasy SPL DirectoryIterator:
<?php
foreach (new DirectoryIterator('../images') as $fileInfo)
{
if($fileInfo->isDot()) continue;
echo $fileInfo->getFilename() . "<br>\n";
}
?>
Nawet łatwiej niż readdir(), należy użyć glob:
$files = glob('/path/to/files/*');
Więcej informacji na temat glob
tylko rozszerzenie na post Enrico, tam również niektóre kontrole/modyfikacje, które musisz zrobić.
class Directory
{
private $path;
public function __construct($path)
{
$path = $path;
}
public function getFiles($recursive = false,$subpath = false)
{
$files = array();
$path = $subpath ? $subpath : $this->path;
if(false != ($handle = opendir($path))
{
while (false !== ($file = readdir($handle)))
{
if($recursive && is_dir($file) && $file != '.' && $file != '..')
{
array_merge($files,$this->getFiles(true,$file));
}else
{
$files[] = $path . $file;
}
}
}
return $files;
}
}
A Wykorzystanie tak:
<?php
$directory = new Directory("/");
$Files = $directory->getFiles(true);
?>
To będzie Ci listę tak:
/index.php
/includes/functions.php
/includes/.htaccess
//...
hoep to pomaga.
Dlaczego nie skorzystać z wbudowanego narzędzia RecursiveDirectoryIterator/DirectoryIterator ...? – ircmaxell
Wierzcie lub nie, ale niektórzy ludzie nadal używają PHP4.x – RobertPitt
Zbyt dużo narzutów z globem – RobertPitt