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> 

Все работает отлично, но массив всех изображений в фоновой папке, похоже, возвращает такие вещи, как «.». или «..» вместо имен изображений время от времени. Я не уверен, что происходит – любые идеи?

'' и '..' возвращаются для текущего и родительского каталога. Вы можете отфильтровать их:

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

Используйте glob() чтобы вы могли фильтровать файлы.

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

Поскольку вы указываете *.jpg , $files содержит только файлы JPG, и вам не нужно удалять . и .. предметы.

Почему бы не использовать регулярное выражение? Таким образом, он фиксирует любое количество периодов. (т. е. «.», «..», «…» и т. д.)

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