2013-01-11 44 views
1

任何人都可以告訴我這段代碼有什麼問題嗎?它應該顯示../files/中的所有文件夾,但它將返回一個空列表。這是代碼:在下拉框中列出子目錄

<?php 
    $upload_dir = chdir("./files/" . $userid); 
    $dirs = glob($upload_dir, GLOB_ONLYDIR); 
    foreach($dirs as $val){ 
     echo '<option value="'.$val.'">'.$val."</option>\n"; 
    }  
?> 
+0

你說「應該在'../ files /'中顯示所有文件夾」,但是你的代碼顯示爲'chdir(「./ files /」。$ userid)'......你需要哪一個?他們是完全不同的東西。 – glomad

+0

回想你的目錄路徑。嘗試使用絕對系統路徑到您的目錄。檢查目錄權限 – SaidbakR

+0

@itchy它在/ files/$ userid中顯示foders sry – Brian

回答

0

你得$upload_dir組從chdir的回報,這將是一個真正的或假,然後嘗試使用它作爲你的參數時glob的設置$迪爾斯。

glob的第一個參數應該是一個字符串,表示一個模式。在你的情況下,你可能需要*列出所有內容(而不是你傳入的TRUE或FALSE)。想象一下glob的第一個參數,你可以在Windows上通過dir,或者在Linux中通過ls,所以在這種情況下可以通過/files/userid/*或類似的方法。

我會做這樣的事情,而不是:

<?php 
    $pattern = "./files/" . $userid . '/*'; 
    $dirs = glob($pattern, GLOB_ONLYDIR); 
    foreach($dirs as $val){ 
     echo '<option value="'.$val.'">'.$val."</option>\n"; 
    }  
?> 

這並沒有改變當前工作目錄的優勢。理想情況下,我會使用絕對路徑而不是相對路徑。

+0

嗨,那工作。謝謝!另外,是否有方法從下拉列表中刪除'./files/'? – Brian

+0

當然,有很多方法可以做到。想到的第一個想法是[substr](http://php.net/manual/en/function.substr.php),[str_replace](http://php.net/manual/en/function)。 str-replace.php)或[爆炸](http://us2.php.net/explode) – ernie

+0

謝謝!使用substr! – Brian

2

chdir()回報truefalse取決於是否更改目錄工作。所以你基本上試圖找到所有名爲10的文件。如果有任何明確定義的行爲的話。

試試這樣說:

<?php 
    if (chdir("./files/" . $userid)) { 
     $dirs = glob('*', GLOB_ONLYDIR); 
     foreach($dirs as $val){ 
      echo '<option value="'.$val.'">'.$val."</option>\n"; 
     }   
    } else { 
     echo 'Changing directory failed.'; 
    } 
?> 
+0

我認爲應該是'glob('*',GLOB_ONLYDIR)' – ernie

+0

@ernie哦是的。對。謝謝。 –

+0

@ernie glob('*',GLOB_ONLYDIR)只返回一個空的下拉菜單 – Brian