0

指定されたディレクトリをトラバースするページを書きたい....そのディレクトリ内のすべてのファイルを取得する...

私の場合、ディレクトリには画像のみが含まれ、画像とそのリンクが表示されます...

このようなもの

例

どうやってするの

psディレクトリはユーザー入力ではありません..常に同じディレクトリになります...

4

10 に答える 10

9
if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            echo "$file\n";
        }
    }
    closedir($handle);
}

readdirを使用する

于 2010-08-31T10:44:08.390 に答える
5
<?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

于 2010-10-30T20:19:42.397 に答える
2

scandir関数を使用して、ディレクトリ内のファイルのリストを調べます。

于 2010-08-31T10:42:28.003 に答える
1

こんにちは、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

于 2010-09-01T06:09:48.320 に答える
0

再帰関数を作成することから始めます。

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 関数を 1 回呼び出すだけで、サブフォルダーを走査し、その下にあるリンクを含む画像を出力します。

于 2014-03-17T20:50:28.837 に答える
0
/**
*  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( '&nbsp;', ( $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;
    }
于 2010-08-31T10:54:12.583 に答える
0

私は次の行に沿って何かを使用します:

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"; }
于 2010-08-31T14:05:39.553 に答える
0

他の人が提案したように、ディレクトリ内のすべてのファイルをチェックするか、グロブを使用して拡張子に基づいてファイルを識別することができます。

于 2010-08-31T11:11:19.020 に答える
0

glob関数を試すこともできます。

$path = '/your/path/';
$pattern = '*.{gif,jpg,jpeg,png}';

$images = glob($path . $pattern, GLOB_BRACE);

print_r($images);
于 2010-08-31T14:23:09.970 に答える
0
$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

于 2010-08-31T10:49:18.613 に答える