Permalänk
Medlem

Göra en random include i PHP?

Jao, hur går man tillväga för att göra detta?

Tänkte skapa en mapp och skapa numrerade php filer i den mappen, sen är det ju bara
för scriptet att välja en random fil från nr 1-8 men frågan är hur?

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk

<?php include rand(1, 8) . ".php"; ?>

Plockar random fil {1-8}.php

Permalänk
Medlem

Om du vet från början hur många filer som finns så kan du ju köra:

include("/filer/fil" . rand(1,100) . ".txt");

Vet du inte hur många filer som finns så bör du med fördel räkna ut det, använd t.ex. opendir (kolla manualen) för att förstå hur man läser innehåll i kataloger.

Permalänk
Medlem

$d = dir("/path/till/dina/filer"); for($i=0;false !== $d->read();$i++){ // Gör inget } $d->rewind(); $random = rand(0, $i); for($i=0;$i<$rand;$i++){ $d->read(); } $fil = $d->read(); $d->close();

Otestad kod som bör fungera på alla mappar som inte har undermappar, oavsett filernas namn. Gör lite sanity checks också så att du inte får konstiga meddelanden om filer som inte finns.

Edit: Ibland gör jag saker svårare än de är...

<?php $filer = scandir('mapp'); $fil = $filer[rand(0,count($filer))]; ?>

Skyller på trötthet :3

Permalänk
Medlem

Tack så mycket för svaren, av någon anledning fick jag bara Totoos version att fungera

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Testpilot

You's sista exempel funkar inte riktigt då scandir även räknar med . och .. när den scannar en katalog, för att få den att funka måste man alltså renska bort dessa två ur arrayen. Man kan exempelvis göra på det här sättet:

$filer= array_diff(scandir('mapp'), array('.', '..'));

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]