2011-06-27 66 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('.')到您的目錄,即opendir('/www/sites/'),並更新$blacklist包括你不希望輸出文件或目錄的名稱。

+2

這隻會過濾'.'和'..',而不是其他目錄。 – phihag

+0

@愛好,好點。查看更新。 –

+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

@Yarin糟糕,你是對的,這是完全缺少'use($ d)'。固定。 – phihag

+0

@ phihag-是的,只是弄明白了 - 很好的解決辦法。 – Yarin

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

您可以使用簡單地GLOB_ONLYDIR glob的,然後篩選結果目錄

+0

適合我。僅列出目錄。謝謝 – Imtiaz

5

只列出文件夾(目錄):

<?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>