PHP Scandir 返回额外的句点


PHP Scandir returns extra periods

所以我正在尝试构建一个脚本来扫描目录并返回随机图像以用作背景。

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>

一切正常,但后台文件夹中所有图像的数组似乎每隔一段时间就会返回诸如"."或".."之类的内容,而不是图像名称。我不确定发生了什么 - 有什么想法吗?

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

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

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

"."

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

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

为什么不使用正则表达式?这样,它可以捕获任意数量的周期。(即"."、".."、"..."等等。

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