2011-06-27 15 views
14

opendir()を使用して、特定のフォルダ(つまり/ www/site /)内のフォルダのみを一覧表示したいと考えています。私はリストからファイルを '。'で除外したいと思います。と '..'のフォルダは、linuxのフォルダ一覧に表示されます。これをどうやってやりますか?フォルダを一覧表示するPHP opendir()

答えて

18

PHP docs for readdir()をご覧ください。これには正確な例が含まれています。完全のために

<?php 
if ($handle = opendir('.')) { 
    $blacklist = array('.', '..', 'somedir', 'somefile.php'); 
    while (false !== ($file = readdir($handle))) { 
     if (!in_array($file, $blacklist)) { 
      echo "$file\n"; 
     } 
    } 
    closedir($handle); 
} 
?> 

単にすなわちopendir('/www/sites/')ディレクトリにopendir('.')を変更し、あなたが出力したくないファイルやディレクトリの名前が含まれるように$blacklistを更新します。

+2

これは、他のディレクトリではなく '.'と' ..'だけをフィルタリングします。 – phihag

+0

@phihag、良い点。更新を参照してください。 –

+0

これはありがとうございました...私はopendirの人を見ていましたが、readdirのページは表示されませんでした。 –

8
function scandir_nofolders($d) { 
    return array_filter(scandir($d), function ($f) use($d) { 
     return ! is_dir($d . DIRECTORY_SEPARATOR . $f); 
    }); 
} 

この機能を使用すると、すべてのプログラマの99.37パーセントはopendir希望を使用して何をしている、反復処理またはどこかに保存することができます配列を返します。

+0

匿名関数で$ dirが有効範囲にないため、空になっているため、フィルタが失敗しています。これを解決する方法がわかりません。 – Yarin

+0

@ヤリンあなたはそうです、これは完全に 'use($ d)'がありません。一定。 – phihag

+0

@phihag-うん、ちょうどそれもよく分かった。 – Yarin

15
foreach(glob('directory/*', GLOB_ONLYDIR) as $dir) { 
    $dir = str_replace('directory/', '', $dir); 
    echo $dir; 
} 

あなたは(ディレクトリ)結果ディレクトリ

+0

は私にとって完璧に機能します。ディレクトリのみを一覧表示します。 Thanks – Imtiaz

5

リストフォルダのみをフィルタリングし、その後GLOB_ONLYDIRでグロブ簡単に使用することができ:

<?php 
$Mydir = ''; ### OR MAKE IT 'yourdirectory/'; 

foreach(glob($Mydir.'*', GLOB_ONLYDIR) as $dir) { 
    $dir = str_replace($Mydir, '', $dir); 
    echo $dir; 
} 
?> 
+1

echo basename($ dir)を使用することもできます。 str_replaceの代わりに。 –

1

glob('*')機能でこれを試してみてください

<?php 
    $dirs = array_filter(glob('*'), 'is_dir'); 
    $i = 1; 
    foreach ($dirs as $value) { 
     echo $i . '. &nbsp; <a href = "http://localhost/' . $value . '" target = "_blank">' . $value . '</a><br>'; 
     $i++; 
    } 
    ?> 

上記コードは現在のディレクトリのフォルダを一覧表示するために私のために働きました。そして、同じブラウザの新しいタブで各フォルダを開くコードをさらに開発しました。これはディレクトリのみを表示します。

1

フォルダー名のドロップダウン(ここではイメージフォルダー)を作成するフォームでも使用できます。画像をアップロードしたユーザが正しいフォルダにプッシュするようにします:-)

<select name="imgfolder"> 
    <option value="genimage">General Image</option> 
    <?php 
    $Mydir = '../images/'; // use 'anydirectory_of_your_choice/'; 

    foreach(glob($Mydir.'*', GLOB_ONLYDIR) as $dir) { 
    $dirname = basename($dir) ; 
    echo '<option value="' . $dirname . '">' . $dirname . '</option>' ; 
    } 
    ?> 
    </select> 
関連する問題