Proponuję,
zamiast
<?php
$folder = opendir("uploads/gallery/");
$i = 0;
while(false !=($plik = readdir($folder))){
if($plik != "." && $plik != ".."){
$obrazki[$i]= $plik;
$i++;
}
}
closedir($folder);
?>
taki zapis ( glob() array_filter() is_file )
<?php
$folder = 'uploads/gallery';
$obrazki = array_filter(glob("$folder/*"), 'is_file');
var_dump($obrazki); // Dla demonstracji
// lub
$obrazki = array_filter(glob("uploads/gallery/*"), 'is_file');
var_dump($obrazki); // Dla demonstracji
?>
a do losowych obrazków bez powtórzeń użyć: shuffle() i array_slice()
<?php
// Pobieramy wszystkie pliki np. *.jpg, *.png itp.
// z folderu gallery i tworzymy tablicę
$obrazki = array_filter(glob("uploads/gallery/*"), 'is_file');
var_dump($obrazki); // Dla demonstracji
shuffle($obrazki); // "Mieszamy" elementy w tablicy
// Pobieramy z tablicy pierwszych 8 elementów
// jeżeli tablica "posiada" mniej elementów niż 8
// domyślnie ustawiana jest wtedy wielkość tablicy
$obrazki = array_slice($obrazki, 0, 8 ?? count($obrazki));
var_dump($obrazki); // Dla demonstracji
echo "<img src='$obrazki[0]' title='".basename($obrazki[0])."' />
<img src='$obrazki[1]' title='".basename($obrazki[1])."' /><br>
<a href='.'>Ponów</a>";
?>
[ UPDATE ]
glob(pattern, flags)
<?php
// Pobieramy wszystkie pliki tylko z rozszerzeniem: *.jpg, *.png.
// z folderu gallery i tworzymy tablicę
$obrazki = array_filter(glob("{uploads/gallery/*.jpg,uploads/gallery/*.png}", GLOB_BRACE), 'is_file');
var_dump($obrazki); // Dla demonstracji
shuffle($obrazki); // "Mieszamy" elementy w tablicy
// Pobieramy z tablicy pierwszych 8 elementów
// jeżeli tablica "posiada" mniej elementów niż 8
// domyślnie ustawiana jest wtedy wielkość tablicy
$obrazki = array_slice($obrazki, 0, 8 ?? count($obrazki));
var_dump($obrazki); // Dla demonstracji
echo "<img src='$obrazki[0]' title='".basename($obrazki[0])."' />
<img src='$obrazki[1]' title='".basename($obrazki[1])."' /><br>
<a href='.'>Ponów</a>";
?>