[英]php directory reading issue
我已經編寫了這個簡單的腳本,將目錄中的所有文件顯示為一組按鈕。
這段代碼從上載目錄中讀取,並在表單中的“提交”按鈕中顯示所有文件。
$handle = opendir("upload");
echo '<form name="form" method="post" action="download.php">';
while($name = readdir($handle)) {
echo '<input type="submit" name="file" value='.$name.' />';
}
echo '</form>';
現在的問題是; 每次我運行腳本時,都會在內容的開頭找到兩個按鈕.
和..
我一直無法弄清楚是什么原因導致了這個問題。
您遇到的是文件系統使用的兩個特殊文件。
.
代表您當前所在的目錄。1
..
表示當前目錄的父目錄。 2
腳注:
1.諸如“ /my_dir/././././././file”之類的路徑等效於“ / my_dir / file” 。
2.諸如“ /my_dir/../my_dir/../my_dir/file”之類的路徑等效於“ / my_dir / file”,因為..
將使您向上移動“一級”。
要解決向用戶顯示這兩個問題,請使用以下內容過濾readdir
返回的內容:
while ($name = readdir ($handle)) {
if ($name == '.' || $name == '..')
continue; /* don't echo anything, skip to next read */
echo '<input type="submit" name="file" value='.$name.' />';
}
目錄清單包括。 對於當前目錄,對於父目錄,..
我通常使用從PHP手冊(http://php.net/manual/en/function.readdir.php)中獲得的代碼
if ($handle = opendir('.')) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
echo "$entry\n";
}
}
closedir($handle);
}
因此,您需要做的是排除。 和..從輸出。
另一種解決方案是使用像這樣的FilesystemIterator:
foreach(new FilesystemIterator('upload') as $file){
echo $file;
}
它將自動跳過。 和..條目在文件系統中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.