Avatar billede vipez Nybegynder
21. juni 2004 - 00:01 Der er 42 kommentarer og
1 løsning

lave menu træ men stop ved index.php

Jeg sidder og prøver at lave min egen lille list of content i med php.

Jeg lister alle mapper og kun disse. Det jeg nu vil er at kunne liste alle mapper og eventuelle undermapper MEN den skal stoppe med at lave listen hvis den støder på array("index.php","index.htm","default.htm");

OG jeg skal kunne lave lidt:
|start
|-næste
  |- ting
|-osv.
Håber i forstår
ps. er ikke haj til php!
Avatar billede jaw Nybegynder
21. juni 2004 - 00:08 #1
noget i stil med det her måske:

  if (in_array($file, $dit_array)) {
  exit;
  } else {
  echo $file;
  }
Avatar billede googolplex Novice
21. juni 2004 - 00:08 #2
function make_tree($path){ //where $path is your source dir.
    $handle=opendir($path);
    while($a=readdir($handle)){
        if(!preg_match('/^\./',$a)){
              $full_path="$path/$a";
              $list[]=$full_path; // REPLACE WITH OPTION IF NEEDED.
              if(is_dir($full_path)){
                  $recursive=make_tree($full_path);
                  for($n=0; $n<count($recursive); $n++){
                        $list[]=$recursive[$n];
                  }
              }
        }
    }
    closedir($handle);
    return $list;
}
Avatar billede vipez Nybegynder
21. juni 2004 - 00:10 #3
googolplex, hvordan bruger jeg den funktion?
Avatar billede googolplex Novice
21. juni 2004 - 00:12 #4
Så kan du udskrive listen og filtrere:

$vises_ikke = array("index.php","index.htm","default.htm");

foreach ($list as $value)
{
    if(!in_array($value, $vises_ikke))
    {
        echo $value;
    }
}

Tror det virker.
Avatar billede googolplex Novice
21. juni 2004 - 00:13 #5
Samlet:

<?php

function make_tree($path){ //where $path is your source dir.
    $handle=opendir($path);
    while($a=readdir($handle)){
        if(!preg_match('/^\./',$a)){
              $full_path="$path/$a";
              $list[]=$full_path; // REPLACE WITH OPTION IF NEEDED.
              if(is_dir($full_path)){
                  $recursive=make_tree($full_path);
                  for($n=0; $n<count($recursive); $n++){
                        $list[]=$recursive[$n];
                  }
              }
        }
    }
    closedir($handle);
    return $list;
}

$list = make_tree('stien/til/din/folder');

$vises_ikke = array("index.php","index.htm","default.htm");

foreach ($list as $value)
{
    if(!in_array($value, $vises_ikke))
    {
        echo $value;
    }
}

?>
Avatar billede jaw Nybegynder
21. juni 2004 - 00:16 #6
Lige bortset fra, at listen ikke vil stoppe udskriften hvis den støder på en filerne i arrayet $vises_ikke, men blot ikke udskrive den... Eller jeg for træt?
Avatar billede vipez Nybegynder
21. juni 2004 - 00:21 #7
øh
Notice: Undefined variable: list in j:\apache\htdocs\index.php on line 42
=>    return $list;
Fatal error: Maximum execution time of 30 seconds exceeded in j:\apache\htdocs\index.php on line 33
Avatar billede googolplex Novice
21. juni 2004 - 00:33 #8
jaw: Nej, jeg havde ikke set at den skulle stoppe, så det skal vel bare ændres til:

foreach ($list as $value)
{
    if(!in_array($value, $vises_ikke))
    {
        echo $value;
    }
    else
    {
        die('Stopper her!');
    }
}
Avatar billede googolplex Novice
21. juni 2004 - 00:36 #9
Den første fejl retter du ved at indsætte følgende i toppen:

$list = array();

Den næste fejl kan jeg ikke hjælpe med, det er fordi dit script timer ud efter 30 sekunder. Hvis det er din egen server, kan du rette max_execution_time i din PHP.INIm hvis der er en en udbyder kan du prøve med:

(i .htaccess): php_value max_execution_time 120
Avatar billede googolplex Novice
21. juni 2004 - 00:37 #10
Evt. skal:

$list = array();

Indsættes i toppen af funktionen.
Avatar billede vipez Nybegynder
21. juni 2004 - 00:44 #11
hmm > http://www.vipez.dynu.com/exp/spm512019/

googoplex: du kan evt prøve smid din version op => http://www.vipez.dynu.com/exp
Avatar billede jaw Nybegynder
21. juni 2004 - 00:53 #12
Den eneste lille finger jeg måske kan sætte på det er, at den ikke vil stoppe dit script, medmindre biblioteket også bliver defineret i dit array, altså:

$dir = "stien/";
$list = make_tree($dir);

$vises_ikke = array("$dir/index.php","$dir/index.htm","$dir/default.htm");

eller simpelthen:

$vises_ikke = array("stien/index.php","stien/index.htm","stien/default.htm");
Avatar billede jaw Nybegynder
21. juni 2004 - 00:54 #13
og evt.: echo $value . "<br>"; for overskuelighedens skyld :)
Avatar billede vipez Nybegynder
21. juni 2004 - 00:59 #14
det jeg har nu laver en fin lang list. nu skal jeg bare have den til at stoppe ved $vises_ikke filer. og kun viser dens mappe.

jaw det du skrev tidliger kan jeg sætte det ind i og hvor?
Avatar billede jaw Nybegynder
21. juni 2004 - 01:01 #15
nah, men det jeg skrev før, kan jeg godt se nu at det ikke helt får den tiltænkte funtkion desværre :(

Og jeg vil gå i seng, men held og lykke med det.
Godnat...
Avatar billede vipez Nybegynder
21. juni 2004 - 01:04 #16
i bund og grund skal det se sådanne ud www.vipez.dynu.com/old.index.php :(

G'Nat Jaw, og tak indtil videre.. ;)
Avatar billede jaw Nybegynder
21. juni 2004 - 07:55 #17
Godmorgen, nu tror jeg, at jeg har fået det til at stoppe ved de filer der er i dit array:

<?php

function make_tree($path){ //where $path is your source dir.
    $handle=opendir($path);
    while($a=readdir($handle)){
        if(!preg_match('/^\./',$a)){
              $full_path="$path/$a";
              $list[]=$full_path; // REPLACE WITH OPTION IF NEEDED.
              if(is_dir($full_path)){
                  $recursive=make_tree($full_path);
                  for($n=0; $n<count($recursive); $n++){
                        $list[]=$recursive[$n];
                  }
              }
        }
    }
    closedir($handle);
    return $list;
    RETURN $full_path;
}

$dir = "sti/";
$list = make_tree($dir);


foreach ($list as $value)
{
  $dir = pathinfo($value);
  $dir = $dir["dirname"];
  $vises_ikke = array("$dir/index.php","$dir/index.htm","$dir/default.htm");
    if(!in_array($value, $vises_ikke))
    {
        echo $value . "<br>";
    }
    else
    {
        die("Stopper her!");
    }
}

?>
Avatar billede vipez Nybegynder
21. juni 2004 - 13:26 #18
hmm det gav mig bare
Undefined variable: list in j:\apache\htdocs\exp\spm512019\index.php on line 18

men du kan som sagt selv prøve at uploade det med det her link:
http://www.vipez.dynu.com/exp/index.php?dir=spm512019/
Avatar billede jaw Nybegynder
22. juni 2004 - 03:00 #19
Hej igen.

Jeg sad og kiggede lidt på det i toget, og jeg havde på en eller anden måde fået en ekstra return på make_tree(); - ikke spørge hvorfor... Men det her, funker nu altså på min Apache server, hvor den returnerer alle filer og undermapper i mappen "_HP"

<?php

function make_tree($path){ //where $path is your source dir.
    $handle=opendir($path);
    while($a=readdir($handle)){
        if(!preg_match('/^\./',$a)){
              $full_path="$path/$a";
              $list[]=$full_path; // REPLACE WITH OPTION IF NEEDED.
              if(is_dir($full_path)){
                  $recursive=make_tree($full_path);
                  for($n=0; $n<count($recursive); $n++){
                        $list[]=$recursive[$n];
                  }
              }
        }
    }
    closedir($handle);
    return $list;
}

$dir = "_HP/";
$list = make_tree($dir);


foreach ($list as $value)
{
  $dir = pathinfo($value);
  $dir = $dir["dirname"];
  $vises_ikke = array("$dir/index.php","$dir/index.htm","$dir/default.htm");
    if(!in_array($value, $vises_ikke))
    {
        echo $value . "<br>";
    }
    else
    {
        die("Stopper her!");
    }
}

?>
Avatar billede vipez Nybegynder
23. juni 2004 - 21:02 #20
hmm. igen se her: http://www.vipez.dynu.com/exp/spm512019/
den skal lave en liste som viser mapper som har filerne $vises_ikke og dermed skal den linke til den mappe. IKKE GÅ IND I MAPPEN.

Jeg ville gerne have det til at se sådan her ud:
http://www.vipez.dynu.com/old.index.php
Avatar billede jaw Nybegynder
23. juni 2004 - 21:04 #21
Altså KUN vise de mapper der indeholder de filer du har i dit array???
Avatar billede vipez Nybegynder
24. juni 2004 - 00:20 #22
ja og ikke andre mapper og heller ikke under-mapper til de filer som er i array'et
Avatar billede vipez Nybegynder
25. juni 2004 - 13:51 #23
Jaw har du givet op ? :(
Avatar billede jaw Nybegynder
25. juni 2004 - 20:19 #24
Har jeg faktisk ikke, men er flyttet, så har ikke haft tid til at se på det endnu :(
Avatar billede jaw Nybegynder
25. juni 2004 - 20:27 #25
men lige endnu et spørgsmål, nu hvor jeg kigger igen... Den skal KUN vise "hovedmapperne", altså hvis der ligger en index.php i mappe/mappe1/index.php skal den kun udskrive /mappe ??
Avatar billede vipez Nybegynder
26. juni 2004 - 19:03 #26
Vi har dette træ

mappe0/mappe0.1
mappe1
mappe2/mappe2.1/mappe2.1.1

[1.eks]
mappe0 har ikke index.php og mappe0.1 har index.php og derfor skal den skal dermed udskrive begge mapper som
mappe0 (ikke link)
|-mappe0.1 (link)
[2.eks]
mappe0 har index.php og mappe0.1 har index.php og derfor skal den skal dermed udskrive begge mapper som
mappe0 (link)
|-mappe0.1 (link)

håber du kan forstå det ??? :o/
Avatar billede vipez Nybegynder
26. juni 2004 - 19:05 #27
evt en var der gør at link er en farve og ikke link en anden farve, eller skal jeg bare lave det med css?
Avatar billede jaw Nybegynder
26. juni 2004 - 21:46 #28
Ok, jeg har kigget på det, og tror den er ved at være der.. Dit eksempel forstår jeg vist den her gang - så tilpasser lige det sidste :)
Avatar billede vipez Nybegynder
01. juli 2004 - 09:15 #29
Jaw noget nyt? aller ligger din computer mon i flytte rod ? ;)
Avatar billede jaw Nybegynder
01. juli 2004 - 14:36 #30
Hehe, nej nej... Den er bærbar, så den kører skam i bedste velgående :)

Du kan lige prøve:
<?php

function make_tree($path){ //where $path is your source dir.
    $handle=opendir($path);
    while($a=readdir($handle)){
        if(!preg_match('/^\./',$a)){
              $full_path="$path/$a";
              $list[]=$full_path; // REPLACE WITH OPTION IF NEEDED.
              if(is_dir($full_path)){
                  $recursive=make_tree($full_path);
                  for($n=0; $n<count($recursive); $n++){
                        $list[]=$recursive[$n];
                  }
              }
        }
    }
    closedir($handle);
    return $list;
}

$dir = ".";
$list = make_tree($dir);

$sidste_mappe = "";
foreach ($list as $value)
{
  $dir = pathinfo($value);
  $dir = $dir["dirname"];
  $vises_ikke = array("$dir/index.php","$dir/index.htm","$dir/default.htm");
  $vises_ikke_subdir = array("index.php","index.htm","default.htm");
  if(in_array($value, $vises_ikke)){
    $mappe = explode("/",$value);
    if($mappe[1] != $sidste_mappe) {
      echo "<a href='". $mappe[1] ."'>" . $mappe[1] . "</a>";
      $sidste_mappe = $mappe[1];
      $i = 2;
      while($mappe[$i] != "" && !in_array($mappe[$i], $vises_ikke_subdir)) {
        echo"<br>";
        $ii = 0;
        while($ii <= $i) {
            echo"&nbsp;";
            $ii++;
        }
        echo"|- " . $mappe[$i];
        $i++;
      }
    echo"<br>";
    }
  }
}

?>

Som er nuværende status...
Avatar billede jaw Nybegynder
01. juli 2004 - 14:37 #31
Alt det med links funker ikke helt endnu, men det er jo bare små tilpasninger :)
Avatar billede vipez Nybegynder
02. juli 2004 - 16:34 #32
Notice: Undefined variable: list in j:\apache\htdocs\test.php on line 18
Avatar billede jaw Nybegynder
02. juli 2004 - 16:37 #33
Det ved jeg så ikke helt, det er googoplex's funktion, og den har jeg ikke pillet ved så vidt jeg husker - og det kører fint her...
Avatar billede vipez Nybegynder
03. juli 2004 - 09:26 #34
hmm...
Avatar billede vipez Nybegynder
04. juli 2004 - 18:14 #35
Det forstår jeg så ikke lige... ?
Avatar billede jaw Nybegynder
04. juli 2004 - 18:24 #36
Har du ikke et andet domæne eller noget hvor du kan prøve det?
Avatar billede vipez Nybegynder
05. juli 2004 - 01:47 #37
jamen burde sku' da virke på min apache 1.3.2, php, 4.3.1, mysql, 4.0 !!!!

skriv lige til mig (icq#58581516) og MSN: irc_at_vipez.dk du får ftp adgang til en mappe på webserver så kan du prøve selv.
Avatar billede jaw Nybegynder
05. juli 2004 - 01:51 #38
Har tilføjet dig...
Avatar billede vipez Nybegynder
12. juli 2004 - 12:46 #39
ja men du næsten aldrig online ```??
Avatar billede vipez Nybegynder
12. juli 2004 - 21:54 #40
Jaw smid et svar og du får point for din kæmpe indsats.
Avatar billede jaw Nybegynder
13. juli 2004 - 00:26 #41
Oki doki... Men det irriterer mig lidt, at vi ikke kan få det til at funke hos dig :/
Avatar billede vipez Nybegynder
13. juli 2004 - 16:06 #42
Irritere sku også mig..

Måske en helt ny kode er sagen.. WHO KNOWS. Du kan jo fange mig på MSN hvis du kommer på noget. Jeg HAR næsten opgivet!
Avatar billede jgni Nybegynder
18. juli 2004 - 22:09 #43
Jeg kan kun få det til at vise den 1. fil, ikke mapper eller andre filer?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester