Ik heb een klein probleempje met het lezen van dirs en files met PHP. 9 van de 10 keer gaat het goed, maar die ene keer niet. Voor Firefox gebruikers is dat niet zo'n drama, maar voor IE gebruikers wel. De hele site layout wordt namelijk uit elkaar getrokken.
Het is de bedoeling dat alle album dirs worden ingelezen en in een array worden geplaatst. Vervolgens wordt er random een album uitgekozen en de images in deze dir ingelezen in een array. Uit al deze images worden random 4 images gekozen. Nu wil het zo nu en dan wel is voorkomen dat er een lege string met images gereturned wordt. Dat zijn dan bijvoorbeeld 1 of 2 van de 4 afbeeldingen. Dit zorgt ervoor dat mijn layout uit elkaar getrokken wordt in IE.
Allereerst lees je met behulp van scandir je fotoalbum map uit. Die geeft je een Array terug met alle album mappen. Per map gebruik je weer scandir. Alle gegevens sla je dan in een multi-dimensionale Array op. Ik dacht aan zo'n vorm:
Nu je $currentAlbumIdentifier hebt, kun je de juiste afbeeldingen selecteren. Om je layout niet te verpesten kun je controleren of er vier afbeeldingen zijn in je array. Als dit niet het geval is, kun je twee dingen doen:
- dit alles via een recursieve functie schrijven zodat je bij een gebrek aan 4 afbeeldingen een nieuwe album geselecteerd word
- de ontbrekende afbeeldingen opvullen met een "no-photo-available" afbeelding
Ik hoop dat je genoeg info hebt om verder te kunnen.
edit: je selecteert je album dan natuurlijk op deze manier:
Bedankt voor de alle informatie Ibrahim. Ik zal even kijken in hoeverre me dit gaat lukken want het klinkt nogal ingewikkeld. Zodra ik weer nieuws te melden heb breng ik jullie op de hoogte
UPDATE: Ik weet eigenlijk niet goed hoe ik moet beginnen.
Je hebt een hoofdmap met albums. Elke album is een submap van deze hoofdmap. Je moet dus de hoofdmap uitlezen met PHP.net: scandir. Van scandir krijg je een array met de submappen van deze hoofdmap terug. Probeer het maar uit:
Uit deze resultaten zie je dat naast je submappen ook de entries "." en ".." terugkrijgt. Bij het loopen door deze array met PHP.net: foreach moet je deze dus negeren/uit de array halen.
Dus nu heb je een array met alle albums (submappen van de hoofdmap). Elke Array entry is een album. Dit betekent dat elke entry afbeeldingen bevatten. Dus moet je per entry weer PHP.net: scandir toepassen:
Nu heb je de array gemaakt die ik in me eerste reactie voorstelde. Aangezien je van scandir alweer de "." en ".." terugkrijgt, moet je ook hier die filtereren.
Hoop dat je nu wel verder kan. Probeer het minstens 3 dagen voor je weer hier om hulp gaat vragen. zo dwing je jezelf om beter te worden.
Het is me gelukt om de multidimensionale array te fixen. Nu heb ik een volgend probleem: ik weet niet hoe ik de array binnen de array moet bewerken. Ik moet namelijk de albumnaam en de foto's ophalen uit de array. De array ziet er nu zo uit:
Ook sluit je daar je echo al af met de ")". Dus zou je een php error krijgen. Het getten van je data uit je array doe je wel goed. Voor ieder niveau binnen een multi dimensionale array kun je weer "[]" gebruiken.
Nu heb je alleen één probleem: je kan meerdere keren dezelfde foto ophalen, de kans hier op hangt van de hoeveelheid foto's in je album af.
Je zou eventueel eerst een array van 4 getallen kunnen genereren die binnen het aantal foto's van je album valt maar nooit het zelfde getal 2 keer heeft.
Het gaat mis bij de directory's (albums). Ik weet niet hoe ik daar random een album moet kiezen. Wanneer ik nou een dir wil kiezen, moet ik een count uitvoeren op de buitenste array, maar ik weet dan niet hoe ik de binnenste array moet selecteren. Doordat count een nummerieke waarde teruggeeft en de buitenste array de dirName draagt. En geen nummerieke waarde
Van de echo heb ik overigens geen last. Dit werkt gewoon zonder php foutmeldingen.
Ik heb mijn code aangepast. Het werkt nu slechts gedeeltelijk. Af en toe worden er helemaal geen foto's weergeven. En... soms worden er slechts 2 van de 4 foto's opgehaald. De variabele $file blijft in dat geval leeg.
Warning: array_rand() [function.array-rand]: First argument has to be an array in /var/www/vhosts/test/albumParser.php on line 27
Warning:array_rand()[function.array-rand]: First argument has to be an array in /var/www/vhosts/test/albumParser.php on line 27
Ook komt het af en toe voor dat hij geen album selecteert. Op de laatste echo krijg ik dan `int(0)`. Eigenlijk zou er ook een een check ingebouwd moeten worden of er een .jpg image uit de map gehaald wordt en geen ander bestand. Want af en toe wordt er gewoon een dummy gereturned in value $file.
Ja precies, dat klopt! Ik zie geen lege array resultaten. Beetje apart dus, dat er soms wel dummies returned worden.
Maar nu is alles dankzij jouw oplossing voor zover ik nu kan zien opgelost. Onwijs bedankt voor jouw hulp. Ik zal hieronder nog even werkende code plaatsen, zodat deze ook door andere gebruikt kan worden. Nogmaals hartstikke bedankt voor jouw hulp!