Я хочу написать страницу, которая пройдет через указанный каталог …. и получить все файлы в этом каталоге …
в моем случае каталог будет содержать только изображения и отображать изображения со своими ссылками …
что-то вроде этого
Как это сделать
ps каталог не будет вводиться пользователем .. он будет одинаковым каталогом всегда …
/** * function get files * @param $path string = path to fine files in * @param $accept array = array of extensions to accept * @param currentLevel = 0, stopLevel = 0 * @return array of madmanFile objects, but you can modify it to * return whatever suits your needs. */ public static function getFiles( $path = '.', $accept, $currentLevel = 0, $stopLevel = 0){ $path = trim($path); //trim whitespcae if any if(substr($path,-1)=='/'){$path = substr($path,0,-1);} //cutoff the last "/" on path if provided $selectedFiles = array(); try{ //ignore these files/folders $ignoreRegexp = "/\.(T|t)rash/"; $ignore = array( 'cgi-bin', '.', '..', '.svn'); $dh = @opendir( $path ); //Loop through the directory while( false !== ( $file = readdir( $dh ) ) ){ // Check that this file is not to be ignored if( !in_array( $file, $ignore ) and !preg_match($ignoreRegexp,$file)){ $spaces = str_repeat( ' ', ( $currentLevel * 4 ) ); // Its a directory, so we need to keep reading down... if( is_dir( "$path/$file" ) ){ //merge current selectFiles array with recursion return which is //another array of selectedFiles $selectedFiles = array_merge($selectedFiles,MadmanFileManager::getFiles( "$path/$file", $accept, ($currentLe$ } else{ $info = pathinfo($file); if(in_array($info['extension'], $accept)){ $selectedFiles[] = new MadmanFile($info['filename'], $info['extension'], MadmanFileManager::getSize($ }//end if in array }//end if/else is_dir } }//end while closedir( $dh ); // Close the directory handle }catch (Exception $e){ echo 'Caught exception: ', $e->getMessage(), "\n"; } return $selectedFiles; }
if ($handle = opendir('.')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { echo "$file\n"; } } closedir($handle); }
использовать readdir
<?php //define directory $dir = "images/"; //open directory if ($opendir = opendir($dir)){ //read directory while(($file = readdir($opendir))!= FALSE ){ if($file!="." && $file!= ".."){ echo "<img src='$dir/$file' width='80' height='90'><br />"; } } } ?>
Источник: phpacademy.org
Вы хотите использовать функцию scandir для просмотра списка файлов в каталоге.
Привет, вы можете использовать DirectoryIterator
try { $dir = './'; /* @var $Item DirectoryIterator */ foreach (new DirectoryIterator($dir) as $Item) { if($Item->isFile()) { echo $Item->getFilename() . "\n"; } } } catch (Exception $e) { echo 'No files Found!<br />'; }
Если вы хотите рекурсивно передавать каталоги: http://php.net/manual/en/class.recursivedirectoryiterator.php
Вы могли бы, если другие предложили проверить каждый файл в каталоге, или вы могли бы использовать glob для идентификации файлов на основе расширения.
Я использую что-то вроде:
if ($dir = dir('images')) { while(false !== ($file = $dir->read())) { if (!is_dir($file) && $file !== '.' && $file !== '..' && (substr($file, -3) === 'jpg' || substr($file, -3) === 'png' || substr($file, -3) === 'gif')) { // do stuff with the images } } } else { echo "Could not open directory"; }
Вы также можете попробовать функцию glob :
$path = '/your/path/'; $pattern = '*.{gif,jpg,jpeg,png}'; $images = glob($path . $pattern, GLOB_BRACE); print_r($images);
$dir = "/etc/php5/";
// Открываем известный каталог и продолжаем читать его содержимое
if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { echo "filename: $file : filetype: " . filetype($dir . $file) . "\n"; } closedir($dh); } }
Дополнительная информация: http://php.net/manual/en/function.opendir.php
Я бы начал с создания рекурсивной функции:
function recurseDir ($dir) { // open the provided directory if ($handle = opendir($_SERVER['DOCUMENT_ROOT'].$dir)) { // we dont want the directory we are in or the parent directory if ($entry !== "." && $entry !== "..") { // recursively call the function, if we find a directory if (is_dir($_SERVER['DOCUMENT_ROOT'].$dir.$entry)) { recurseDir($dir.$entry); } else { // else we dont find a directory, in which case we have a file // now we can output anything we want here for each file // in your case we want to output all the images with the path under it echo "<img src='".$dir.$entry."'>"; echo "<div><a href='".$dir.$entry."'>".$dir.$entry."</a></div>"; } } } }
Параметр $ dir должен быть в следующем формате: «/ path /» или «/ path / to / files /»
В принципе, просто не включайте корень сервера, потому что я уже сделал это ниже, используя $ _SERVER ['DOCUMENT_ROOT'].
Таким образом, в конце концов просто вызовите функцию recurseDir, которую мы только что сделали в вашем коде один раз, и она будет перемещаться по любым подпапкам и выводить изображение со ссылкой под ним.