/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Find og vælg tilfældig fil i mappe
Fra : Kim Ludvigsen


Dato : 17-08-08 21:12

Jeg skal have indsat en tilfældig include-fil fra en mappe.
Hvordan gør jeg det med php?

Jeg har tænkt i disse baner - men jeg er måske på vildspor:

$dir = "mappenavn";
$antal= count(glob("$dir/*.*"));
$tilfaeldig = rand(1,$antal);

læs og indsæt filnavnene i et array - hvordan?
$filnavn= hent filnavn fra array ud fra $tilfaeldig - hvordan?

Jeg har prøvet at tjekke php-manualen omkring opendir() og
readdir(), men det er sort snak for mig, og mine forsøg med
at kopiere kode har ikke ført noget godt med sig (serveren
går tilsyneladende i selvsving).

--
Mvh. Kim Ludvigsen
Ryd op i dine højrekliksmenuer med Mmm Free.
http://kimludvigsen.dk

 
 
Bertel Lund Hansen (17-08-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 17-08-08 22:22

Kim Ludvigsen skrev:

> Jeg har tænkt i disse baner - men jeg er måske på vildspor:

> $dir = "mappenavn";
> $antal= count(glob("$dir/*.*"));

glob() laver netop det array du har brug for.

   $filnavne = glob("$dir/*.*");
   $antal = count($filnavne);
   $tilfaeldig = rand(2,$antal);

   $filnavn=$filnavne[$tilfaeldig];

Men inden du slipper rutinen løs, skal du lige tjekke at de to
første filer er . og .. - altså aktuel mappe og aktuel overmappe.
Du får en løkke (eller fejl hvis du bruger dem som include-filer.

Tjekket kan du lave ved at udskrive $filnavne med print_r().

Du kan ogs lave en lidt mere omstændelig rutine der skipper
mapper:

   $filnavne=array();
   foreach (glob("$dir/*.*") as $entry) {
      if (is_file($entry)) $filnavne[]=$entry;
   }

Endelig kan du udnytte en inbygget funktion til at tage et
tilfældigt element:

   $tilfaeldig = array_rand($filnavne);

--
Bertel
http://bertel.lundhansen.dk/      FIDUSO: http://fiduso.dk/

Kim Ludvigsen (17-08-2008)
Kommentar
Fra : Kim Ludvigsen


Dato : 17-08-08 22:36

Bertel Lund Hansen skrev:

> glob() laver netop det array du har brug for.

Tak, så har jeg lidt at lege med i morgen.

--
Mvh. Kim Ludvigsen
Beskyt dine data med stærk kryptering - velegnet til bærbare
computere og USB-nøgler.
http://kimludvigsen.dk

Michael Rasmussen (18-08-2008)
Kommentar
Fra : Michael Rasmussen


Dato : 18-08-08 00:25



Michael Rasmussen (18-08-2008)
Kommentar
Fra : Michael Rasmussen


Dato : 18-08-08 00:38



Bertel Lund Hansen (18-08-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 18-08-08 00:49

Michael Rasmussen skrev:

> Glemte lige: *.* vil imidlertid returnere alle øvrige kataloger i
> mappen, hvorfor det nok er en dårlig løsning.

Det problm har jeg allerede anvist en enkel løsning på.

--
Bertel
http://bertel.lundhansen.dk/      FIDUSO: http://fiduso.dk/

Kim Ludvigsen (18-08-2008)
Kommentar
Fra : Kim Ludvigsen


Dato : 18-08-08 07:49

Bertel Lund Hansen skrev:
> Michael Rasmussen skrev:
>
>> Glemte lige: *.* vil imidlertid returnere alle øvrige kataloger i
>> mappen, hvorfor det nok er en dårlig løsning.
>
> Det problm har jeg allerede anvist en enkel løsning på.

Det er slet ikke et problem. Og havde jeg vidst, at det
kunne være et potentielt problem, havde jeg uddybet. Jeg
kommer ikke til at bruge *.*, men nærmere "noget*.txt" og
"nogetandet*.txt".

--
Mvh. Kim Ludvigsen
Ryd op i dine foretrukne bogmærker med AM-DeadLink.
http://kimludvigsen.dk

Bertel Lund Hansen (18-08-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 18-08-08 08:47

Kim Ludvigsen skrev:

> Det er slet ikke et problem. Og havde jeg vidst, at det
> kunne være et potentielt problem, havde jeg uddybet. Jeg
> kommer ikke til at bruge *.*, men nærmere "noget*.txt" og
> "nogetandet*.txt".

Okay, så kan du nøjes med det her:

Hvis du skal bruge det tilfældige nummer andre steder:

   $filnavne = glob("$dir/*.txt");
   $antal = count($filnavne);
   $tilfaeldig = rand($antal);
   $filnavn = $filnavne[$tilfaeldig];

Første element i et array har nummer 0, så hvis du sætter 1 på
som minimumsværdi, springer du det første over.

Og hvis ikke:

   $filnavne = glob("$dir/*.txt");
   $filnavn = array_rand($filnavne);

--
Bertel
http://bertel.lundhansen.dk/      FIDUSO: http://fiduso.dk/

Kim Ludvigsen (18-08-2008)
Kommentar
Fra : Kim Ludvigsen


Dato : 18-08-08 14:01

Bertel Lund Hansen skrev:
> Kim Ludvigsen skrev:
>
>> Det er slet ikke et problem. Og havde jeg vidst, at det
>> kunne være et potentielt problem, havde jeg uddybet. Jeg
>> kommer ikke til at bruge *.*, men nærmere "noget*.txt" og
>> "nogetandet*.txt".
>
> Okay, så kan du nøjes med det her:

>    $filnavne = glob("$dir/*.txt");
>    $filnavn = array_rand($filnavne);

Ikke helt - så får jeg kun det tilfældige tal. Jeg har brugt:

$filnavne = glob("$dir/*.txt");
$tilfaeldig = array_rand($filnavne);
$filnavn=$filnavne[$tilfaeldig];

Det virker fint, og jeg takker mange gange for hjælpen.

--
Mvh. Kim Ludvigsen
Spar på tastetrykkene med Flashpaste, der husker tekst for dig.
http://kimludvigsen.dk

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408921
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste