Random Image Met Behulp Van Glob
Development PHP

Random Image Met Behulp Van Glob

Ik had laatst een script nodig om wat plaatjes random te laten zien en had ergens vroeger zo’n scriptje gedownload. Maar bij nader inzien vond ik 200 regels code een beetje overdreven dus heb ik gewoon mijn eigen script hiervoor geschreven.Ik ga ervan uit dat je basis php kennis hebt en ga dus niet alles in depth uitleggen. We beginnen met het maken van functie die een variabele nodig de directory van de plaatjes aangeeft

<?php
function getRandomImage ($dir) {
}

Om de afbeeldingen op te halen gaan we gebruik maken van de glob functie. Glob is een functie die standaard in PHP zit om files te zoeken. Glob werkt op de volgende manier: glob ( string $pattern [, int $flags = 0 ] )

De onderstaande code zal bijvoorbeeld alle .txt bestanden in de huidige dir ophalen en vervolgens de naam en de grootte van het bestand laten zien.

<?php
foreach (glob("*.txt") as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}

Zoals je ziet is dit gewoon een foreach loop. Echter willen wij geen tekst bestanden maar afbeeldingen ophalen. Aangezien afbeeldingen meerdere extensies kunnen hebben wordt het glob gedeelte iets ingewikkelder maar nog steeds goed te begrijpen als je er goed naar kijkt. Onze glob functie ziet er zo uit:

<?php
$images = glob("$dir{*.gif,*.jpg,*.png}", GLOB_BRACE);

Om het wat makkelijker maken splitsen we het op in kleine stukjes.

glob() Met het commando glob zeggen we dus dat we bestanden willen zoeken

glob("$dir") Door onze variabele $dir toe te voegen geven we de juiste directory aan.

glob("$dir{*.gif,*.jpg,*.png}") Door {*.gif, *.jpg, *.png} hier direct achter te zetten zeggen we dat we alle bestanden die eindigen op .gif, .jpg en .png willen hebben.

glob("$dir{*.gif,*.jpg,*.png}", GLOB_BRACE) Als je maar 1 extensie nodig hebt heb je de “{ }” niet nodig en kan je code ook een stuk makkelijker. Omdat dit bij ons echter tussen de “{ }” staat omdat we meerdere file extenties willen hebben moeten we hier ook nog de GLOB_BRACE flag aan toevoegen.

Onze functie ziet er nu zo uit:

<?php 
function getRandomImage ($dir) {
    $images = glob("$dir{*.gif,*.jpg,*.png}", GLOB_BRACE); 
}

Als het goed is hebben we nu een array met de plaatjes. Echter willen we niet alle afbeeldingen uit de folder maar slechts een willlekeurige. Hiervoor gebruiken we array_rand.

<?php 
function getRandomImage ($dir) {
    $images = glob("$dir{*.gif,*.jpg,*.png}", GLOB_BRACE); 
    $images [array_rand($images)];
}

Van de $images krijgen we nu een random entry. Vervolgens willen we alleen nog onze $image terug krijgen. Hiervoor gebruiken we simpelweg een return statement. Ook willen we nog een check uitvoeren om te kijken of er wel images zijn. Dit is de uiteindelijke functie:

<?php 
function getRandomImage($dir) {
    $images = glob("$dir{*.gif,*.jpg,*.png}", GLOB_BRACE);
    
    if (count($images) == 0) {
        return;
    }

    return $images[array_rand($images)];
}