2012-06-15 124 views
2

所以我試圖構建一個腳本來掃描一個目錄並返回隨機圖像作爲背景。PHP Scandir返回額外的時間段

的PHP是這樣的:

$dir = "views/img/bg/"; 
$dh = opendir($dir); 
while (false !== ($filename = readdir($dh))) { 
    $files[] = $filename; 
} 

$random_key = array_rand($files, 1); 

$random = $files[$random_key]; 

然後,我只是用一些簡單的jQuery的圖像附加爲背景:

<script> 
$(document).ready(function(){ 

    $("body").css("background" , "url(http://'.$url_root.'/views/img/bg/'.$random.'), center center"); 

}); 
</script> 

一切工作正常,但所有的圖像在陣列後臺文件夾似乎正在返回像'。'這樣的東西。或'..'而不是每隔一段時間圖像名稱。我不知道發生了什麼 - 有什麼想法?

回答

7

'。''和'..'返回當前和父目錄。你可以過濾它們:

while (false !== ($filename = readdir($dh))) { 
    if ($filename != '.' && $filename != '..')  
     $files[] = $filename; 
} 
+0

打我給它有 – allen213

+2

如果條件應該是這樣'如果($文件名!=「」 && $ filename!='..')'other wise ..將被添加到$ files數組 – sun

+0

中,所以單個點是當前目錄,兩個點是父目錄? – www139

6

使用​​3210所以你可以過濾文件。

$files = glob('views/img/bg/*.jpg'); 
$random = $files[array_rand($files)]; 

既然你指定*.jpg$files只包含JPG文件,你不需要刪除...項目。

+1

這對他來說是最好的解決方案。反正 - 即使glob('*')也不會返回。和.. – Niksac

+0

對我來說也是最好的解決方案。我可以在同一步驟中篩選特定的文件擴展名。請注意,文件名字符串隨目錄路徑一起提供。 – Mateng

0
$dh = opendir("c:\"); 
while (false !== ($filename = readdir($dh))) { 
    if ($filename != '.' && $filename != '..')  
     $files[] = $filename; 
} 
1

爲什麼不使用正則表達式?這樣它可以捕獲任何時間段。 (即「‘’。‘’......」等。)

while (false !== ($filename = readdir($dh))) { 
     if(!preg_match('/^\.*$/',$filename)){ 
      $files[] = $filename; 
     }