2012-06-15 85 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; 
     }