directory uitlezen en 4 random submappen tonen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robin

Robin

26/01/2008 15:09:00
Quote Anchor link
Hallo,

Ik heb in een directory 150 submappen staan. Met onderstaand script geeft hij ze ook perfect weer.

Nu is het echter de bedoeling dat er van die 150 mappen maar 4 random worden weergegeven

In alle mappen zitten 10 plaatjes. Alle bestandsnamen zijn in elke map hetzelfde.

de bedoeling is om uiteindelijk links te creeeren met de diverse submappen zodat hij telkens andere content laat zien.

voorbeeld link :

http://www.website.nl/map1/01.jpg

"map1" is dan de submap die verandert word adhv de random keuze van het script. Er moeten in totaal 4 links worden aangemaakt en het zou op onderstaande manier ongeveer aangeroepen dienen te worden

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?

http://www.website.nl/$map(01)/01.jpg

http://www.website.nl/$map(02)/01.jpg

http://www.website.nl/$map(03)/01.jpg

http://www.website.nl/$map(04)/01.jpg

?>



Onderstaande code werkt nu prima, maar dient dus uitgebreid te worden met een random opties waarbij hij maar 4 mappen uitleest en deze per map naar het scherm geschreven kan worden.

Heeft iemand enig idee hoe ik dit hetbeste aan kan pakken ?

Jullie hoeven het niet voor te kauwen hoor, maar ik weet niet goed waar ik die random erin moet zetten en hoe ik ze per map naar mijn scherm kan schrijven..

tips zijn dus van harte welkom...alvast bedankt voor alle moeite


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?

//vul hier de directory in die doorzocht moet worden
$path = "/blablabla/htdocs/test";

//open de directory
$dir_handle = @opendir($path) or die("Unable to open $path");

//haal de submappen eruit en verwijder de . en .,
while ($map = readdir($dir_handle))
{

   if($map!="." && $map!="..")
   echo $map;
}


//closing the directory
closedir($dir_handle);

?>


gr

Robin
Gewijzigd op 01/01/1970 01:00:00 door Robin
 
PHP hulp

PHP hulp

16/11/2024 15:46:13
 
- SanThe -

- SanThe -

26/01/2008 15:21:00
Quote Anchor link
$path = "/blablabla/htdocs/map" . rand(1, 100);
 
Robin

Robin

26/01/2008 15:27:00
Quote Anchor link
dat gaat helaas niet werken, want dan pakt hij een random van de hoofdirectory en niet van de subdirectories

foutmelding

Unable to open /blablabla/htdocs/test1

edit :

ik heb er nu een / bij gezet zodat hij de random submap pakt, echter verschijnt er nu /blablabla/htdocs/test/1 (die 1 is dus random)

maar voor die 1 moet nog een 0 staan, dus map 01, 02, 03 etc...hoe krijg ik dat voor elkaar ?

heb nu :

$path = "/blablabla/htdocs/test/" . rand(01, 04);

maar dan laat hij die 0 dus niet zien en pakt hij de map niet.


En hoe kan ik deze per map naar het scherm schrijven dan ?
Gewijzigd op 01/01/1970 01:00:00 door Robin
 
- SanThe -

- SanThe -

26/01/2008 15:38:00
Quote Anchor link
$path = "/blablabla/htdocs/test/" . str_pad(rand(1, 4), 2, "0", STR_PAD_LEFT);
 
Robin

Robin

26/01/2008 16:28:00
Quote Anchor link
allereerst even bedankt voor de supersnelle reactie, dat heb ik echt nog nooit ergens anders meegemaakt !!!

Op zich werkt jouw laatste toevoeging prima, maar het script blijkt nu niet te doen wat ik wil.

Hij opent nu namelijk random een map in de directory "test". en aangezien daar geen submappen in zitten geeft hij niets weer.

Naar mijn mening was het allereerste pad nog het beste : $path = "/blablabla/htdocs/test"

Echter moet er dus een soort van limiet in komen dat hij er maximaal 4 mag laten zien en daarna een random er overheen...

$path = "/blablabla/htdocs/test"" . LIMIT (1, 4); werkt helaas niet, limit kan je hier waarschijnlijk niet gebruiken omdat het geen query is...enig idee hoe ik het dan kan doen ?

die random zou toch echt ergens anders moeten ben ik bang....heb je nog suggesties ?



---------------------------------------
edit
---------------------------------------

op zich hoeft die limit eigenlijk niet eens, al zou het wel handig zijn want dat beperkt de laadtijd uiteraard...

maar als ik het voor elkaar kan krijgen om ze random te laten verschijnen dan ben ik er in principe al, want dat schrijf ik er gewoon maar 4 naar mijn scherm...


Daar heb ik echter nog een vraag over, namelijk :

met echo $map; heef ik alle mappen weer..... hoe kan ik ze per map weergeven ? moet ik het dan in een array gooien of iets anders doen ?

ik bedoel dat ik iets kan doen als :

echo $map(1);

echo $map(2);


alvast bedankt voor de moeite

gr
Gewijzigd op 01/01/1970 01:00:00 door Robin
 
- SanThe -

- SanThe -

26/01/2008 17:05:00
Quote Anchor link
Nou wordt het wat vaag voor mij. :(

Even samenvatten:
Je hebt een map: test
Daarin staan mappen: map1, map2, map3, enz.
In die mappen staan weer plaatjes: 01.jpg, 02.jpg, enz.

En nou wil je random 4 mappen uitlezen met alle plaatjes daarin?
 
Robin

Robin

26/01/2008 17:24:00
Quote Anchor link
De structuur die je aangeeft klopt helemaal. Echter hoef ik de submappen zelf niet uit te lezen..die namen zijn toch altijd hetzelfde.

het gaat er dus om dat ik 4 random mappen kan selecteren uit de directory "test" en de namen van de 4 mappen wil ik verwerken in een link en die ik dus apart naar mijn scherm te kunnen schrijven.

ik heb nu zeg maar 4 links op mijn website staan die er zo uit zien :

http://www.websites.nl/test/randommap1/1.jpg

http://www.websites.nl/test/randommap2/1.jpg

http://www.websites.nl/test/randommap3/1.jpg

http://www.websites.nl/test/randommap4/1.jpg

"randommap(1 tm 4)" dient dus te wijzigen adhv het script zodat hij met dezelfde links elke keer andere plaatjes" laat zien.

De rest van de linkinhoud is dus statisch en zal altid hetzelfde blijven.

Het script zal adhv een cookie of cronjob dagelijks worden aangeroepen waardoor er dagelijks 4 andere random mapnamen in de link verschijnen waardoor de gehele layout er anders uit komt te zien en dus dagelijks verandert.


Om even een compleet beeld te schetsen :

Het is de bedoeling dat ik op deze manier niets meer aan de site zelf hoef te veranderen. Als ik in de map "test" een nieuwe map met plaatjes toevoeg word die uiteindelijk zelf meegenomen in het script en vertoont op de site....zo hou ik het eea dynamisch.
Gewijzigd op 01/01/1970 01:00:00 door Robin
 
- SanThe -

- SanThe -

26/01/2008 17:37:00
Quote Anchor link
Robin schreef op 26.01.2008 17:24:
.... Als ik in de map "test" een nieuwe map met plaatjes toevoeg word die uiteindelijk zelf meegenomen in het script en vertoont op de site.....

Je had het eerst over 150 mappen. Maar dat getal verhoogt dus af en toe. Dan moet je eigenlijk steeds de hele inhoud van 'test' inlezen in een array(). Even shuffelen en de eerste 4 gebruiken.
 
Robin

Robin

26/01/2008 19:13:00
Quote Anchor link
Ja dat klopt, echter word het script dadelijk op meerdere sites gebruikt vandaar dat het aantal mappen per site kan verschillen en ook per update zal vergroten.

maar dat in een array zetten en ff shuffelen klinkt makkelijker dan het is haha..heb al wat zitten knutselen, maar het gaat nog niet echt goed...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?

$array
= array();

//vul hier de directory in die doorzocht moet worden
$path = "/blablabla/htdocs/map" ;

//open de directory
$dir_handle = @opendir($path) or die("Unable to open $path");

//haal de submappen eruit en verwijder de . en ..
while(($map = readdir($dir_handle))!==false){

if($map != "." && $map != ".." && !is_dir($map)) {

$array[$map];

shuffle($array);

$link1 = $array[0];
$link2 = $array[1];
$link3 = $array[2];
$link4 = $array[3];

}

}


//directory sluiten
closedir($dir_handle);

?>


volgens mij ligt het aan dit gedeelte : $array[$map];

maar weet niet goed wat er achter moet komen, of zit ik helemaal mis ?

op de pagina verschijnt nu alleen de tekst "Array" als ik array echo

gr
 
- SanThe -

- SanThe -

26/01/2008 19:19:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$array
= array();
while(($map = readdir($dir_handle))!==false)
{

    if($map != "." && $map != ".." && is_dir($map))
    {

         $array[] = $map;
     }
}

shuffle($array);
?>
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
 
Robin

Robin

26/01/2008 19:30:00
Quote Anchor link
haha sorry dat ik je weer moet lastig vallen...hij geeft geen error, maar laat alleen de tekst "array" zien....

dit heb ik nu :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?

$array
= array();

//vul hier de directory in die doorzocht moet worden
$path = "/blablabla/htdocs/test" ;

//open de directory
$dir_handle = @opendir($path) or die("Unable to open $path");

//haal de submappen eruit en verwijder de . en .. en stop alles in een array
while(($map = readdir($dir_handle))!==false)

{


    if($map != "." && $map != ".." && is_dir($map))
    {

         $array[] = $map;
    }

}


shuffle($array);

//directory sluiten
closedir($dir_handle);

echo $array;

?>
Gewijzigd op 01/01/1970 01:00:00 door Robin
 
- SanThe -

- SanThe -

26/01/2008 19:41:00
Quote Anchor link
Dat klopt. Je haalt ze er uit zoals je zelf al liet zien.

$link1 = $array[0];
$link2 = $array[1];
$link3 = $array[2];
$link4 = $array[3];
 
Robin

Robin

26/01/2008 20:57:00
Quote Anchor link
Helaas werkt ook dat niet...als ik "array" echo krijg ik als tekst "array" te zien op mijn scherm.

als ik een van de links echo (zoals in onderstaande code) dan verschijnt er niets, echter ook geen foutmelding.

is het volgende stukje wel correct ?

$array[] = $map;

Ik heb onderstaande nu een keer of 40 doorlopen en gecontroleerd, maar voor zover ik kan zien staan er geen fouten in....jij nog enige suggesties ?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?

$array
= array();

//vul hier de directory in die doorzocht moet worden
$path = "/blablabla/htdocs/test" ;

//open de directory
$dir_handle = @opendir($path) or die("Unable to open $path");

//haal de submappen eruit en verwijder de . en .. en stop alles in een array
while(($map = readdir($dir_handle))!==false)

{


    if($map != "." && $map != ".." && is_dir($map))
    {

         $array[] = $map;
    }

}


//shuffle array en produceer de links
shuffle($array);

$link1 = $array[0];
$link2 = $array[1];
$link3 = $array[2];
$link4 = $array[3];

//directory sluiten
closedir($dir_handle);

echo $link1;

?>



------------------------------------
edit
-------------------------------------

ergens zit het hem in die array...als ik namelijk onderstaande code probeer dan werkt alles prima.

op een of andere manier lijkt jij met bovenstaande code niets in de array te zetten...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
  
$array
= array('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16');

shuffle($array);

$link1 = $array[0];

echo $link1;

?>



-------------------------------
edit 2
--------------------------------

geloof het of niet, maar ik heb het waarschijnlijk gevonden !!! Ik heb nu de volgende regel aangepast en nu lijkt alles prima te werken

if($map != "." && $map != ".." && is_dir($path . "/" . $map))

ik heb nu even te lang naar mijn scherm zitten staren dus wil morgen nog ff wat test, maar ja het werkt nu in ieder geval wel
Gewijzigd op 01/01/1970 01:00:00 door Robin
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.