Question

So I am trying to build a script that scans a directory and returns random images to be used as backgrounds.

The php looks like this:

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

$random_key = array_rand($files, 1);

$random = $files[$random_key];

Then I am just using some simple jquery to attach the images as backgrounds:

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

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

});
</script>

Everything works fine but the array of all the images in the background folder seems to be returning stuff like '.' or '..' instead of image names every once in a while. Im not sure what is going on - any ideas?

Was it helpful?

Solution

'.' and '..' are returned for current and parent directory. You can filter them:

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

OTHER TIPS

Use glob() so you can filter the files.

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

Since you're specifying *.jpg, $files contains only JPG files and you don't need to remove the . and .. items.

Why not use regex? That way it captures any amount of periods. (i.e. ".", "..", "..." etc..)

while (false !== ($filename = readdir($dh))) {
        if(!preg_match('/^\.*$/',$filename)){
            $files[] = $filename;
        }
$dh = opendir("c:\");
while (false !== ($filename = readdir($dh))) {
    if ($filename != '.' && $filename != '..')    
       $files[] = $filename;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top