Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] listowanie i przegladanie folderow/plikow - problem, cos sie posypuje ...
wilman
post
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 11.02.2007

Ostrzeżenie: (0%)
-----


Witam!
Mam kod, który listuje mi zawartość katalogu. Katalog pobierany jest z adresu strony np index.php?katalog=./ , chciałbym zrobić tak, żeby można było swobodnie poruszać się po katalogach, a jeśli w katalogu są pliki to wydrukować do nich bezpośrednie linki np. qwe/rty/uiop/plik.rozszerzenie . W moim przypadku listowanie katalogu działa ale tylko do drugiego poziomu, a dalej drukuje mi nie taką ścieżkę jaką powinien. Czysto dla sprawdzenia w kodzie umieściłem żeby drukował [plik] lub [katalog] w zależności od typu drukowanej zawartości, ale przy drugim poziomie (katalog w katalogu) już się sypie bo przy folderach drukuje [plik].
  1. <? 
  2. if(empty($_GET['sciezka'])) { $_GET['sciezka']='./'; } 
  3. $folder = htmlspecialchars(nl2br(strip_tags($_GET['sciezka'])));
  4.  
  5. echo "Znajdujesz się w <b>$sciezka</b><br/><a href="javascript:history.go(-1)">[wróć]</a><br /> ";
  6. $dir = dir($folder);
  7. while ($file = $dir->read()) {
  8.  
  9. if (is_dir($file)) {
  10. $folder = substr($folder, 1);
  11. $adres = "<a href="index.php?sciezka=./$folder$file">$file [katalog]</a> n ";
  12. if (!(($file=='.') || ($file=='..')))
  13. $d[] = '[ '.$adres.' ]';
  14. } else {
  15. $adres = "<a href="/$folder/$file">$file [plik]</a>n ";
  16. $l[] = $adres; } 
  17. }
  18. $dir->close();
  19. if ((isset($d)) && (count($d)<>0))
  20. {
  21.  sort($d);
  22.  for ($i=0;$i<count($d);$i++)
  23. echo $d[$i]."<br />rn";
  24. }
  25. if ((isset($l)) && (count($l)<>0))
  26. {
  27.  sort($l);
  28.  for ($j=0;$j<count($l);$j++)
  29. echo $l[$j]."<br />rn";
  30. } else
  31.  echo('Katalog jest pusty!');
  32. ?>



Gdyby ktoś mógł mi pomóc, byłbym wdzięczny
Pozdrawiam

pe-es: jak zabezpieczyć ten skrypt ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Coen
post
Post #2





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 12.02.2007

Ostrzeżenie: (0%)
-----


Cytat
Czy nie wystarczy tylko poprawic tego kodu? Bo jezeli nie to napisze rekurencyjnie (o ile mi sie uda) tak jak pisales

moim zdaniem pisanie czegos takiego nie-rekurencyjnie to masochizm w najczystszej postaci (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
robie aktualnie cos podobnego
byc moze moje wypociny beda uzyteczne, a juz napewno masz przyklad rekurencji
  1. <?php
  2. function DirTree($root_dir,$num,$heap)
  3.  {
  4. $heap[$num] = $root_dir.'/'; // <-- To jest taki niby stos (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
  5. $dir = implode(NULL,$heap);
  6. $tab = SetTabulator($num);
  7. $list = scandir($dir);
  8.  
  9. $output = '<table border="1" align="center" cellspacing="0" width="800">';
  10.  
  11. $list = SortList($dir,$list);
  12. for($i=2;$i<count($list);$i++)
  13. {
  14.  
  15.  if (is_dir($dir.$list[$i]))
  16.  {
  17.  
  18. $output .= '<tr><td><a href="run.php?name='.$list[$i].'">'.$list[$i].'</a></td><td align="right">DIR</td>'."n";
  19. if($_SESSION[$list[$i]] == 'open') 
  20. {
  21.  $output .= "n<tr><td>";
  22.  $output .= DirTree($list[$i],$num+1,$heap);
  23.  $output .= "</td></tr>n";
  24. }
  25.  }
  26.  
  27.  else { 
  28. $output .= '<tr><td> '.$list[$i].'</td><td align="right" width="80">'.MyFileSize($dir.$list[$i])."</td></tr>n"; }
  29. }
  30. $output .= '</table>';
  31. return $output;
  32.  }
  33. ?>

wywoluje ja tak:
  1. <?php
  2. echo DirTree('',0,''); // Jesli chce zaczac od katalogu glownego
  3. ?>

Funkcje SetTabulator MyFileSize SortList maja charakter czysto kosmetyczny, mozna je wywalic.
Po drobnych przerobkach powinno hulac rowniez u ciebie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
To dziala tylko pod php5
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 17:36