/** * Return the listing of a directory * * @access public * @param string $directory * @param string $type * @param string $order * @param string $direction * @param bool $limit * @param array $fileExtensions * @return array * @throws \Exception */ public function getListing($directory, $type = self::TYPE_BOTH, $order = self::KEY_NAME, $direction = self::ASC, $limit = false, $fileExtensions = array()) { // Get the contents of the dir $listing = array(); $directory = rtrim($directory, '/'); // Check Dir if (!is_dir($directory)) { throw new \Exception('Directory does not exist: ' . $directory); } // Get Raw Listing $directoryHandle = opendir($directory); while (false !== ($file = readdir($directoryHandle))) { if (substr($file, 0, 1) != '.') { // skip anything that starts with a '.' i.e.:('.', '..', or any hidden file) // Directories if (is_dir($directory . '/' . $file) && ($type == self::TYPE_BOTH || $type == self::TYPE_DIR)) { $listing[] = array(self::KEY_TYPE => self::TYPE_DIR, self::KEY_NAME => $file, self::KEY_DATE => filemtime($directory . '/' . $file), self::KEY_SIZE => filesize($directory . '/' . $file), self::KEY_EXT => ''); // Files } elseif (is_file($directory . '/' . $file) && ($type == self::TYPE_BOTH || $type == self::TYPE_FILE)) { if (!count($fileExtensions) || in_array(Util::getExtension($file), $fileExtensions)) { $listing[] = array(self::KEY_TYPE => self::TYPE_FILE, self::KEY_NAME => $file, self::KEY_DATE => filemtime($directory . '/' . $file), self::KEY_SIZE => filesize($directory . '/' . $file), self::KEY_EXT => Util::getExtension($file)); } } } // Impose Limit, if specified if ($limit && count($listing) >= $limit) { break; } } closedir($directoryHandle); // Sorting $listing = $this->sort($listing, $type, $order, $direction); // Callbacks if ($this->filterCallback) { $listing = call_user_func($this->filterCallback, $listing); } // Total Size $totalSize = 0; foreach ($listing as $item) { $totalSize += $item[self::KEY_SIZE]; } $this->lastSize = $totalSize; // Item Count $this->lastItemCount = count($listing); // Done return $listing; }