Поэтому я пытаюсь создать скрипт, который сканирует каталог и возвращает случайные изображения, которые будут использоваться в качестве фона.
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; }