PHP Scandir返回额外的句点

时间:2012-06-15 09:30:39

标签: 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>

一切正常但背景文件夹中所有图像的数组似乎都在返回“。”之类的内容。或者'..'而不是每隔一段时间的图像名称。我不确定发生了什么 - 有什么想法吗?

4 个答案:

答案 0 :(得分:6)

''并为当前和父目录返回'..'。您可以过滤它们:

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

答案 1 :(得分:6)

使用glob()以便过滤文件。

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

由于您指定的是*.jpg$files仅包含JPG文件,因此您无需删除...项。

答案 2 :(得分:1)

为什么不使用正则表达式?这样它可以捕获任何数量的时期。 (即“。”,“......”,“......”等。)

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

答案 3 :(得分:0)

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