<?php
// Simple way to get all files in a directory
$files = new FilesystemIterator('/home/user/folder/');
foreach($files as $file)
{
echo $file->getFilename() . '<br>\n';
}
?>
(PHP 5 >= 5.3.0, PHP 7)
The Filesystem iterator
$path
[, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS
] )FilesystemIterator::CURRENT_AS_PATHNAMEMakes FilesystemIterator::current() return the pathname.
FilesystemIterator::CURRENT_AS_FILEINFOMakes FilesystemIterator::current() return an SplFileInfo instance.
FilesystemIterator::CURRENT_AS_SELFMakes FilesystemIterator::current() return $this (the FilesystemIterator).
FilesystemIterator::CURRENT_MODE_MASKFilesystemIterator::KEY_AS_PATHNAMEMakes FilesystemIterator::key() return the pathname.
FilesystemIterator::KEY_AS_FILENAMEMakes FilesystemIterator::key() return the filename.
FilesystemIterator::FOLLOW_SYMLINKSMakes RecursiveDirectoryIterator::hasChildren() follow symlinks.
FilesystemIterator::KEY_MODE_MASKFilesystemIterator::NEW_CURRENT_AND_KEYSame as FilesystemIterator::KEY_AS_FILENAME | FilesystemIterator::CURRENT_AS_FILEINFO.
FilesystemIterator::SKIP_DOTSSkips dot files (. and ..).
FilesystemIterator::UNIX_PATHS
Makes paths use Unix-style forward slash irrespective of system default.
Note that the path that is passed to the
constructor is not modified.
| 版本 | 说明 |
|---|---|
| 5.3.1 | Added FilesystemIterator::FOLLOW_SYMLINKS |
<?php
// Simple way to get all files in a directory
$files = new FilesystemIterator('/home/user/folder/');
foreach($files as $file)
{
echo $file->getFilename() . '<br>\n';
}
?>
DirectoryIterator returns virtual directories "." and ".." in a loop.
But FilesystemIterator ignores them.
You may be wondering, like I did, what is the difference between this class and DirectoryIterator?
When you iteterate using DirectoryIterator each "value" returned is the same DirectoryIterator object. The internal state is changed so when you call isDir(), getPathname(), etc the correct information is returned. If you were to ask for a key when iterating you will get an integer index value.
FilesystemIterator (and RecursiveDirectoryIterator) on the other hand returns a new, different SplFileInfo object for each iteration step. The key is the full pathname of the file. This is by default. You can change what is returned for the key or value using the "flags" arguement to the constructor.