3

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

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

4 回答 4

7

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

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

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

于 2012-06-15T09:34:47.990 回答
6

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

while (false !== ($filename = readdir($dh))) {
    if ($filename != '.' && $filename != '..')    
        $files[] = $filename;
}
于 2012-06-15T09:33:25.370 回答
1

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

while (false !== ($filename = readdir($dh))) {
        if(!preg_match('/^\.*$/',$filename)){
            $files[] = $filename;
        }
于 2014-12-06T17:07:30.863 回答
0
$dh = opendir("c:\");
while (false !== ($filename = readdir($dh))) {
    if ($filename != '.' && $filename != '..')    
       $files[] = $filename;
}
于 2013-10-28T11:04:16.873 回答