<?PHP
// Original PHP code by Chirp Internet: www.chirpinternet.eu
// Please acknowledge use of this code by including this header.
class FileExtFilter extends FilterIterator
{
private $fileext;
public function __construct(Iterator $iterator, $fileext)
{
parent::__construct($iterator);
$this->fileext = $fileext;
}
public function accept()
{
$file = $this->getInnerIterator()->current();
return preg_match("/\.({$this->fileext})$/", $file);
}
}
function getFilteredFileList($dir, $ext)
{
$retval = array();
// add trailing slash if missing
if(substr($dir, -1) != "/") $dir .= "/";
// open directory for reading
$d = new DirectoryIterator($dir) or die("getFilteredFileList: Failed opening directory $dir for reading");
$iterator = new FileExtFilter($d, $ext);
foreach($iterator as $fileinfo) {
// skip hidden files
if($fileinfo->isDot()) continue;
$retval[] = array(
'name' => "{$dir}{$fileinfo}",
'type' => ($fileinfo->getType() == "dir") ? "dir" : mime_content_type($fileinfo->getRealPath()),
'size' => $fileinfo->getSize(),
'lastmod' => $fileinfo->getMTime()
);
}
return $retval;
}
?>
<h1>Applying a FilterIterator</h1>
<table class="collapse" border="1">
<thead>
<tr><th>Name</th><th>Type</th><th>Size</th><th>Last Modified</th></tr>
</thead>
<tbody>
<?PHP
$dirlist = getFilteredFileList("images/", "jpe?g"); // jpg, jpeg
// output file list as table rows
foreach($dirlist as $file) {
echo "<tr>\n";
echo "<td><a href=\"{$file['name']}\">",basename($file['name']),"</a></td>\n";
echo "<td>{$file['type']}</td>\n";
echo "<td>{$file['size']}</td>\n";
echo "<td>",date('r', $file['lastmod']),"</td>\n";
echo "</tr>\n";
}
?>
</tbody>
</table>