可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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?
回答1:
'.' and '..' are returned for current and parent directory. You can filter them:
while (false !== ($filename = readdir($dh))) { if ($filename != '.' && $filename != '..') $files[] = $filename; }
回答2:
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.
回答3:
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; }
回答4:
$dh = opendir("c:\"); while (false !== ($filename = readdir($dh))) { if ($filename != '.' && $filename != '..') $files[] = $filename; }