/ 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
Tilfældig fil
Fra : Ukendt


Dato : 18-10-11 20:41

Jeg ville gerne lave en filmappe med et ukendt antal undermapper som
indeholde et ukendt antal filer og hvor filnavnet er varierende.
Ville man med PHP kunne lave det sådan at en helt tilfældig fil fra en af
disse mapper ville blive indlæst hver gang en siden opdateres ?

I det her tilfælde drejer det sig om billedefiler - .jpg

Hvis det kan lade sig gøre er der så nogen som kan lede mig på vej i hvad
jeg skal skal lave for at få det lavet ?
Ville der være andre måder at løse dette problem med end PHP - evt. andre
måder som er smartere ?

Jeg er helt blank i PHP og derfor spørger jeg.


Mvh. Allan


 
 
Philip Nunnegaard (18-10-2011)
Kommentar
Fra : Philip Nunnegaard


Dato : 18-10-11 21:08

Allan M skrev:
> Jeg ville gerne lave en filmappe med et ukendt antal undermapper som
> indeholde et ukendt antal filer og hvor filnavnet er varierende.
> Ville man med PHP kunne lave det sådan at en helt tilfældig fil fra en
> af disse mapper ville blive indlæst hver gang en siden opdateres ?
>
> I det her tilfælde drejer det sig om billedefiler - .jpg

Jeg lavede en gang noget lignende. Her gemte jeg alle filnavnene i en
database og satte den så til at finde en tilfældig post i databasen og
vise billedet ud fra dette.

Jeg satte den til at udtrække et tilfældigt tal mellem 1 og det antal
poster der var i databasen og derefter vælge den post der passede til
det nummer.

Jeg brugte php og MySQL.

--
Philip

Birger Sørensen (18-10-2011)
Kommentar
Fra : Birger Sørensen


Dato : 18-10-11 21:38

Allan M formulerede spørgsmålet:
> Jeg ville gerne lave en filmappe med et ukendt antal undermapper som
> indeholde et ukendt antal filer og hvor filnavnet er varierende.
> Ville man med PHP kunne lave det sådan at en helt tilfældig fil fra en af
> disse mapper ville blive indlæst hver gang en siden opdateres ?
>
> I det her tilfælde drejer det sig om billedefiler - .jpg
>
> Hvis det kan lade sig gøre er der så nogen som kan lede mig på vej i hvad jeg
> skal skal lave for at få det lavet ?
> Ville der være andre måder at løse dette problem med end PHP - evt. andre
> måder som er smartere ?
>
> Jeg er helt blank i PHP og derfor spørger jeg.
>
>
> Mvh. Allan

Prøv at se på funktionen glob
http://dk2.php.net/manual/en/function.glob.php
Det må kunne lade sig gøre på en eller anden måde.
Lidt besværligt, når strukturen ikke er kendt - men i et par trin
måske..

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



scootergrisen (19-10-2011)
Kommentar
Fra : scootergrisen


Dato : 19-10-11 02:31

Du kan gøre sådan her :

<?php

$filnavne = glob("billeder/*.jpg");

$tilfeldigindex = array_rand($filnavne, 1);

$filnavn = $filnavne[$tilfeldigindex];

echo '<img src="' . $filnavn . '" alt="tilfældigt billede">';

?>

Arne Feldborg (19-10-2011)
Kommentar
Fra : Arne Feldborg


Dato : 19-10-11 07:49

scootergrisen <scootergrisen@gmail.com> skrev Wed, 19 Oct 2011 03:30:32
+0200

>Du kan gøre sådan her :
>
><?php
>
>$filnavne = glob("billeder/*.jpg");
>
Helt så enkelt er det nu ikke når der er et ukendt antal undermapper.

Så skal han først finde mapperne med GLOB_ONLYDIR som parameter.

Og derefter en løkke der kører de fundne mapper igennem og søger efter
jpg filer og putter den alle i eet og samme array.

--
mvh, A:\Feldborg
feldborg@haunstrup.dk
Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

Leif Neland (19-10-2011)
Kommentar
Fra : Leif Neland


Dato : 19-10-11 09:53


"Arne Feldborg" <feldborg@haunstrup.dk> skrev i en meddelelse
news:k8ss97t47n2n7quriks6la8nosarif1t63@4ax.com...
> Helt så enkelt er det nu ikke når der er et ukendt antal undermapper.
>
> Så skal han først finde mapperne med GLOB_ONLYDIR som parameter.
>
> Og derefter en løkke der kører de fundne mapper igennem og søger efter
> jpg filer og putter den alle i eet og samme array.
>

Afhængig af trafikken og antal undermapper kan det godt blive lidt tungt at
skulle gøre det for hvert visning af siden.

Jeg ville overveje databaseløsningen omtalt tidligere, og så kun lave
opdatering af databasen = reindexering af billeder en gang imellem, enten
når der uploades billeder (gøres det via php?) eller bare regelmæssigt med
cron eller f.ex. lave en check at indexet er for gammelt når siden vises, og
kun reindexere i det tilfælde.

Hvis man laver det i bunden af siden, så generer det ikke brugeren at det
tager lidt tid.
....
echo "</html>";
flush();
reindexer_billeder_hvis_nødvendigt();

Leif



Stig Johansen (19-10-2011)
Kommentar
Fra : Stig Johansen


Dato : 19-10-11 10:09

Leif Neland wrote:

> Afhængig af trafikken og antal undermapper kan det godt blive lidt tungt
> at skulle gøre det for hvert visning af siden.

Ja, der er ikke en optimal løsning

Man behøver dog ikke en database hvis man kender (og opdaterer) antallet af
filer.

Hvis man nummererer dem som fil1.xyz, fil2.xyz, kan navnet udledes fra en
random alene.

Samme for directiories.

Er der tale om en slags upload, kan data let opdateres ved opload, og
behøver ikke et cron job.

--
Med venlig hilsen
Stig Johansen

Philip Nunnegaard (19-10-2011)
Kommentar
Fra : Philip Nunnegaard


Dato : 19-10-11 20:11

Stig Johansen skrev:

> Man behøver dog ikke en database hvis man kender (og opdaterer) antallet af
> filer.

Nej. Og det gør man nok ofte på en statisk hjemmeside.

Min databaseløsning var baseret på at sidens webmaster ikke nødvendigvis
kendte antallet af billeder. Enten fordi brugerne kunne uploade
billeder, eller fordi han selv tilføjede nye billeder ofte, og der var
mange af dem.

> Hvis man nummererer dem som fil1.xyz, fil2.xyz, kan navnet udledes fra en
> random alene.

Det havde jeg ikke tænkt over, men det er da en dejligt simpel løsning.

--
Philip

Martin Larsen (19-10-2011)
Kommentar
Fra : Martin Larsen


Dato : 19-10-11 22:48

Philip Nunnegaard wrote:

>> Hvis man nummererer dem som fil1.xyz, fil2.xyz, kan navnet udledes fra en
>> random alene.
>
> Det havde jeg ikke tænkt over, men det er da en dejligt simpel løsning.

Men det går desværre ikke i dette tilfælde hvor Allan har et ukendt
antal filer i et ukendt antal undermapper.

Stig Johansen (20-10-2011)
Kommentar
Fra : Stig Johansen


Dato : 20-10-11 08:15

Martin Larsen wrote:

> Philip Nunnegaard wrote:
>
>>> Hvis man nummererer dem som fil1.xyz, fil2.xyz, kan navnet udledes fra
>>> en random alene.
>>
>> Det havde jeg ikke tænkt over, men det er da en dejligt simpel løsning.
>
> Men det går desværre ikke i dette tilfælde hvor Allan har et ukendt
> antal filer i et ukendt antal undermapper.

Hvis der er tale om et 'upload system', er intet ukendt ;)

Man skal altid tænke eventstyret, og fange eventen der hvor den opstår (i
uploaden).

Jeg kender ikke Allan's system, men det gør du åbenbart..?

--
Med venlig hilsen
Stig Johansen

Martin Larsen (20-10-2011)
Kommentar
Fra : Martin Larsen


Dato : 20-10-11 11:00

Stig Johansen wrote:

> Man skal altid tænke eventstyret, og fange eventen der hvor den opstår (i
> uploaden).

Sjovt, jeg læste det først som "man skal tænke eventyret" !

> Jeg kender ikke Allan's system, men det gør du åbenbart..?

Nej, men jeg gætter ud fra følgende sætning i det oprindelige indlæg:

"Jeg ville gerne lave en filmappe med et ukendt antal undermapper som
indeholde et ukendt antal filer og hvor filnavnet er varierende."

Det lyder ikke som om det er særligt styret ...


Stig Johansen (20-10-2011)
Kommentar
Fra : Stig Johansen


Dato : 20-10-11 11:42

Martin Larsen wrote:

> Stig Johansen wrote:
>
>> Man skal altid tænke eventstyret, og fange eventen der hvor den opstår (i
>> uploaden).
>
> Sjovt, jeg læste det først som "man skal tænke eventyret" !

Ja, men det er nu ikke eventyr

Det handler lidt om performanceoptimering, hvor man bør fange eventen når
den opstår (een gang) i stedet for at spørge senere (mange gange).

>
>> Jeg kender ikke Allan's system, men det gør du åbenbart..?
>
> Nej, men jeg gætter ud fra følgende sætning i det oprindelige indlæg:
>
> "Jeg ville gerne lave en filmappe med et ukendt antal undermapper som
> indeholde et ukendt antal filer og hvor filnavnet er varierende."
>
> Det lyder ikke som om det er særligt styret ...

Styret nej.

Men det er selvmodsigende, hvis du nærlæser det.

Den eneste måde at lave et _ukendt_ antal mapper med et _ukendt_ antal filer
er at lave et program, der genererer tilfældige filer/undermapper.

Når han snakker billeder osv, så tænker jeg mere på gallerier/bruger, og
hvis det er tilfældet er alting kendt (ved upload).

Hvis du (OP) kan/vil læse ASP, så har jeg lagt nogle ting til download,
herunder også oprettelse af brugere/gallerier, hvor hver bruger får sit
eget dir og billeder osv.

Se efter et indlæg med 'Stigs ting' i .html gruppen (tror jeg det var).

Der er nogle guldkorn med upload, generering af thumbnails, oversigter
m.m.m.

Det er svært at forholde sig til hvad folk kan og ikke kan, men umiddelbart
vil jeg mene det er en smal sag at PHP/mySQL-'ficere' det.

--
Med venlig hilsen
Stig Johansen

Martin Larsen (20-10-2011)
Kommentar
Fra : Martin Larsen


Dato : 20-10-11 11:53

Stig Johansen wrote:

> Den eneste måde at lave et_ukendt_ antal mapper med et_ukendt_ antal filer
> er at lave et program, der genererer tilfældige filer/undermapper.

Med mindre _ukendt_ blot skal forstås som "jeg ved ikke lige hvor mange
der er og hvad de hedder, og orker ikke at finde ud af det"



Stig Johansen (20-10-2011)
Kommentar
Fra : Stig Johansen


Dato : 20-10-11 12:48

Martin Larsen wrote:

> Stig Johansen wrote:
>
>> Den eneste måde at lave et_ukendt_ antal mapper med et_ukendt_ antal
>> filer er at lave et program, der genererer tilfældige filer/undermapper.
>
> Med mindre _ukendt_ blot skal forstås som "jeg ved ikke lige hvor mange
> der er og hvad de hedder, og orker ikke at finde ud af det"

Skal vi tærske langhalm på det her ?
Min Konqueror f.eks. skriver 110 items - 95 files...

Hvor svært kan det være?

--
Med venlig hilsen
Stig Johansen

Martin Larsen (20-10-2011)
Kommentar
Fra : Martin Larsen


Dato : 20-10-11 15:12

Stig Johansen wrote:

> Skal vi tærske langhalm på det her ?

Næh. Jeg skrev blot at OP formentligt ikke kender til antallet og
filnavnene på de pågældende billeder og mapper og derfor brugte ordet
ukendt. Men jeg ved det jo ikke. Det gør kun han selv. Og det var
faktisk dig selv der begyndte at grave i begrebet "ukendt" !

> Min Konqueror f.eks. skriver 110 items - 95 files...
> Hvor svært kan det være?

Jeg ved faktisk ikke hvad du mener. 110 items - 95 files? Hvordan
relaterer det til tråden?


Stig Johansen (21-10-2011)
Kommentar
Fra : Stig Johansen


Dato : 21-10-11 07:31

Martin Larsen wrote:

> Stig Johansen wrote:
>
>> Min Konqueror f.eks. skriver 110 items - 95 files...
>> Hvor svært kan det være?
>
> Jeg ved faktisk ikke hvad du mener. 110 items - 95 files? Hvordan
> relaterer det til tråden?

Det var relateret til det du skrev:
> ..og orker ikke at finde ud af det..

Det var blot et hint til at finde ud hvor mange filer(og dirs), der er i
mapperne.

--
Med venlig hilsen
Stig Johansen

Ukendt (24-10-2011)
Kommentar
Fra : Ukendt


Dato : 24-10-11 19:20

> Hvor svært kan det være?

Uha det lyder teknisk det hele.

Historien er at jeg har ca. 2000 billeder fra digitalkamera med private
billeder.
Dem ville jeg gerne bruge som tilfælde thumbs - 3-5 stks af gangen på en
privat hjemmeside.
Der bliver ugentligt lagt billeder op som familien har taget - det er noget
jeg selv står for og gør med FTP.
Mapperne er kaldt efter årstal - ex 2010 - 2011 med undermapper som kan være
sommerferie - skolestart - fastelavn osv.
Så i de mapper som allerede er ved jeg hvor mange billeder der er og hvad de
hedder.
For nemhedens skyld ville jeg gerne lave det således at alle billeder altid
kom med og jeg ikke skulle bruge til på at ændre filnavne mm.

Ved ikke om denne info kan bruges til at rådgive mig om det bedst mulige
løsning.
Er ja det må helst ikke gøre siden meget mere tung at indlæse.


Mvh. Allan



Martin Larsen (24-10-2011)
Kommentar
Fra : Martin Larsen


Dato : 24-10-11 21:00

Allan M wrote:

> Ved ikke om denne info kan bruges til at rådgive mig om det bedst mulige
> løsning.
> Er ja det må helst ikke gøre siden meget mere tung at indlæse.

Hvorfor prøver du ikke mit forslag som er lige til at gå til?

$path = "/billeder/ligger/her/";
$Directory = new RecursiveDirectoryIterator($path);
$Iterator = new RecursiveIteratorIterator($Directory);
$matches = new RegexIterator($Iterator, '/^.+\.jpg$/i',
RecursiveRegexIterator::GET_MATCH);
$count = iterator_count($matches);
foreach($matches as $match) {
$billeder[] = $match[0];
}
$billede = $billeder[rand(0, $count-1)];
echo '<img src="' . $billede . '" alt="tilfældigt billede">',"\n";

Du skal bare ændre stien til dine billeder i første linje.

Ukendt (24-10-2011)
Kommentar
Fra : Ukendt


Dato : 24-10-11 21:15



>>Hvorfor prøver du ikke mit forslag som er lige til at gå til?

Det vil jeg gøre - kunne ikke lige gennemskue at det var lige til at bruge.

Jeg prøver og vender tilbage med evt. problemer.



Mvh. Allan


Ukendt (24-10-2011)
Kommentar
Fra : Ukendt


Dato : 24-10-11 21:28





>>Hvorfor prøver du ikke mit forslag som er lige til at gå til?

Det vil jeg gøre - kunne ikke lige gennemskue at det var lige til at bruge.

Jeg prøver og vender tilbage med evt. problemer.


( ! ) Parse error: syntax error, unexpected ']', expecting T_STRING or
T_VARIABLE or T_NUM_STRING in
C:\wamp\www\backershus\templates\basictemplate\index.php on line 40
Call Stack
# Time Memory Function Location
1 0.0004 378672 {main}( ) ..\index.php:0
2 0.2752 8923128 JSite->render( ) ..\index.php:49
3 0.2755 8923632 JDocumentHTML->parse( ) ..\application.php:249
4 0.2755 8923632 JDocumentHTML->_fetchTemplate( )
...\html.php:378
5 0.2757 8924000 JDocumentHTML->_loadTemplate( ) ..\html.php:547

Ovenstående fejl er hvad der sker for mig - jeg forsøger at se om jeg kan
google nogle svar på det
men lige umiddelbart er det helt sort for mig.


Mvh. Allan


Martin Larsen (24-10-2011)
Kommentar
Fra : Martin Larsen


Dato : 24-10-11 22:34

Allan M wrote:

> ( ! ) Parse error: syntax error, unexpected ']', expecting T_STRING or
> T_VARIABLE or T_NUM_STRING in
> C:\wamp\www\backershus\templates\basictemplate\index.php on line 40

Min kode har 10 linjer og du har fejl på linje 40. Det fortæller mig at
dit script er en del længere, så kan du ikke lige vise det i sin helhed?

Arne Feldborg (25-10-2011)
Kommentar
Fra : Arne Feldborg


Dato : 25-10-11 00:36

Martin Larsen <martin+spamfree+larsen@bigfoot.com> skrev Mon, 24 Oct
2011 22:00:00 +0200

>Hvorfor prøver du ikke mit forslag som er lige til at gå til?
>
Det har været et genenmgående tema i denne tråd, at Glob() er alt for
langsom, alt for besværlig, alt for gammeldags etc. det har sågar været
foreslået at samle data op og lægge dem i en database.

Og jeg har egentlig ikke haft lyst til at blande mig den til tider lidt
højtravende diskussin.

Men det er jo altså ikke vedens største problem vi her står med, og
engang i mellem kan det godt betale sig at tage de simple midler i brug.
KISS

Bare lige for sjovs skyld sad jeg lige og prøvede: I en mappe med 27
undermapper og ialt 6.434 filer tager din rutine 2-3 sekunder - mens
Glob() tager under eet sekund og kan skrives på færre linjer.


//***************************************
$path = "my_dir/";
echo '<br>'.time();

foreach (glob($path.'*', GLOB_ONLYDIR) as $dir_name) {
   foreach (glob($dir_name.'/*.jpg') as $file_name) {
      $files[] = $file_name;
   }
}
//$billede = $billede = $files[rand(0, count($files)-1)];
//echo '<img src="' . $billede . '" alt="tilfældigt billede">',"\n";

echo '<br>'.count($files);
echo '<br>'.time();

//**********************************************
$path = "my_dir/";
$Directory = new RecursiveDirectoryIterator($path);
$Iterator = new RecursiveIteratorIterator($Directory);
$matches = new RegexIterator($Iterator, '/^.+\.jpg$/i',
RecursiveRegexIterator::GET_MATCH);
$count = iterator_count($matches);
foreach($matches as $match) {
$billeder[] = $match[0];
   }
//$billede = $billeder[rand(0, $count-1)];
//echo '<img src="' . $billede . '" alt="tilfældigt billede">',"\n";

echo '<br>'.$count;
echo '<br>'.time();
exit;
--
mvh, A:\Feldborg
feldborg@haunstrup.dk
Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

Martin Larsen (25-10-2011)
Kommentar
Fra : Martin Larsen


Dato : 25-10-11 10:54

Arne Feldborg wrote:

> Det har været et genenmgående tema i denne tråd, at Glob() er alt for
> langsom, alt for besværlig, alt for gammeldags etc. det har sågar været
> foreslået at samle data op og lægge dem i en database.

Ja, men ikke af mig Jeg har det helt fint med glob, den er god og
hurtig, men jeg synes bare iteratorer er nemmere at arbejde med da de
gør tingene lidt simplere. Men smag og behag er jo forskellig.

> Men det er jo altså ikke vedens største problem vi her står med, og
> engang i mellem kan det godt betale sig at tage de simple midler i brug.
> KISS

Enig. Jeg mente også en databaseløsning var overkill.

> Bare lige for sjovs skyld sad jeg lige og prøvede: I en mappe med 27
> undermapper og ialt 6.434 filer tager din rutine 2-3 sekunder - mens
> Glob() tager under eet sekund

Har du taget højde for caching? Med andre ord, har du kørt programmerne
flere gange og kontrolleret at timingen holder? Jeg modsiger ikke at
glob muligvis er hurtigere, man skal bare tage forbehold for caching.

> og kan skrives på færre linjer

Du sammenligner æbler og pærer

Mit program går i en vilkårligt dybde mens dit program kun håndterer en
flad folderstruktur. Det fejler hvis der er foldere i flere niveuaer
under hinanden.

Hilsen
Martin

Arne Feldborg (25-10-2011)
Kommentar
Fra : Arne Feldborg


Dato : 25-10-11 11:59

Martin Larsen <martin+spamfree+larsen@bigfoot.com> skrev Tue, 25 Oct
2011 11:53:38 +0200

>Med andre ord, har du kørt programmerne
>flere gange og kontrolleret at timingen holder?
>
Ja.

>mens dit program kun håndterer en
>flad folderstruktur.
>
Som jeg også selv gjorde opmærksom på. Det var udelukkende lavet for
sjovs skyld og for teste hastigheden. Jeg blev selv meget overrasket
over resultatet.

> Det fejler hvis der er foldere i flere niveuaer
>under hinanden.
>
Ja. Eller rettere: Nej, men det vil koste et par linjer ekstra.

--
mvh, A:\Feldborg
feldborg@haunstrup.dk
Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

Martin Larsen (25-10-2011)
Kommentar
Fra : Martin Larsen


Dato : 25-10-11 13:08

Arne Feldborg wrote:

> Som jeg også selv gjorde opmærksom på. Det var udelukkende lavet for
> sjovs skyld og for teste hastigheden. Jeg blev selv meget overrasket
> over resultatet.


Ok, det har så ikke lige kunne finde (at det kun gjalt i en flad
struktur). Men det er spændende med hastighedsresultatet, og jeg vil
prøve på min reallife billedmappe når jeg kommer ind på den stationære.

Fordelen ved en regexiterator er at du kan have en meget kompleks
wildcardmatching (det har jeg ofte brug for), men til simple ting som i
dette tilfælde er det jo ligegyldigt.

Ukendt (25-10-2011)
Kommentar
Fra : Ukendt


Dato : 25-10-11 20:47



"Martin Larsen" skrev i meddelelsen
news:4ea5c3c2$0$289$14726298@news.sunsite.dk...

Allan M wrote:

> Ved ikke om denne info kan bruges til at rådgive mig om det bedst mulige
> løsning.
> Er ja det må helst ikke gøre siden meget mere tung at indlæse.

Hvorfor prøver du ikke mit forslag som er lige til at gå til?


Her er hele index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Thumbstest</title>

</head>
<body>
<?php
$path = "billeder/blandet";
$Directory = new RecursiveDirectoryIterator($path);
$Iterator = new RecursiveIteratorIterator($Directory);
$matches = new RegexIterator($Iterator, '/^.+\.jpg$/i',
RecursiveRegexIterator::GET_MATCH);
$count = iterator_count($matches);
foreach($matches as $match) {
$billeder[] = $match[0];
}
$billede = $billeder[rand(0, $count-1)];
echo '<img src="' . $billede . '" alt="tilfældigt billede">',"\n";
?>

</body>
</html>

Efter jeg har kigget lidt og forsøgt mig er jeg nu nået til at teksten med
"tilfældigt billede" kommer frem
men ikke noget billede.


Mvh. Allan



Ukendt (25-10-2011)
Kommentar
Fra : Ukendt


Dato : 25-10-11 20:59

Hvorfor prøver du ikke mit forslag som er lige til at gå til?

Ved ikke om jeg sidder og klodser i det nu men prøvede lige at indlæse i
explorer og der kører det helt fint.
Bruger normalt firefox men sikkert noget cache der ikke er tømt.

Jeg roder lidt videre og siger indtil nu tak for hjælpen.



Allan


Martin Larsen (19-10-2011)
Kommentar
Fra : Martin Larsen


Dato : 19-10-11 10:30

Leif Neland wrote:

> Afhængig af trafikken og antal undermapper kan det godt blive lidt tungt at
> skulle gøre det for hvert visning af siden.

Ja, men der skal meget til!

Det rigtige til en opgave som denne er en iterator, nærmere bestemt
RegexIterator. Den er som skabt til opgaven, kort og koncis og meget hurtig:

$path = "/billeder/ligger/her/";
$Directory = new RecursiveDirectoryIterator($path);
$Iterator = new RecursiveIteratorIterator($Directory);
$matches = new RegexIterator($Iterator, '/^.+\.jpg$/i',
RecursiveRegexIterator::GET_MATCH);
foreach($matches as $match) {
$filnavn = $match[0];
echo '<img src="' . $filnavn . '" alt="tilfældigt billede">',"\n";
}

På min pc tog en skanning af alle mine digitale billeder - en meget
kompleks struktur med mange undermapper og ca. 19.000 billeder - 6
sekunder første gang mens efterfølgende skanninger tog 1/2 sekund pga.
caching.

Så hvis man tager den øge kompleksitet i betragtning, især hvis billeder
løbende bliver uploadet, så skal der altså mange billeder til før jeg
ville overveje en databaseløsning.

Martin








Martin Larsen (19-10-2011)
Kommentar
Fra : Martin Larsen


Dato : 19-10-11 10:59

Martin Larsen wrote:

> Så hvis man tager den øge kompleksitet i betragtning, især hvis billeder
> løbende bliver uploadet, så skal der altså mange billeder til før jeg
> ville overveje en databaseløsning.

Og man har jo lov at lave opdateringen periodisk og gemme arrayet mellem
hver opdatering.

I mit eksempel var jeg lige lovlig hurtig: jeg skrev bare alle
billederne ud, det er naturligvis ikke meningen, der skal udvælges en
tilfældig fra arrayet:

$path = "/billeder/ligger/her/";
$Directory = new RecursiveDirectoryIterator($path);
$Iterator = new RecursiveIteratorIterator($Directory);
$matches = new RegexIterator($Iterator, '/^.+\.jpg$/i',
RecursiveRegexIterator::GET_MATCH);
$count = iterator_count($matches);
foreach($matches as $match) {
$billeder[] = $match[0];
}
$billede = $billeder[rand(0, $count-1)];
echo '<img src="' . $billede . '" alt="tilfældigt billede">',"\n";

Søg
Reklame
Statistik
Spørgsmål : 177414
Tips : 31962
Nyheder : 719565
Indlæg : 6407831
Brugere : 218875

Månedens bedste
Årets bedste
Sidste års bedste