Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Drzewko - ID katalogów i plików
Forum PHP.pl > Forum > PHP
b_chmura
Witam

Pisząc skrypt indeksowania katalogów i plików z serwera spotkał mnie pewien problem który sam nie potrafię rozwiązać.
Problemem są numery ID katalogów i plików. Na razie robie to w dość prymitywny sposób który mnie nie zadowala i nie jest tak funkcjonalny jaki by mnie interesował. ID miało by wyglądać w następujący sposób:
Pierwsze katalogi są numerowane od 1 wzwyż podrzędne odziedziczają numer po nadrzędnym + są także numerowane od jeden wzwyż i tak aż do ostatniego katalogu. Pliki będą odziedziczały numer ID po katalogu plus własne numerowanie.

Przykład:
Kod
- katalog 1
- katalog 2
---- katalog 2.1
------- plik 2.1-1
------- plik 2.1-2
------- plik 2.1-3
---- katalog 2.2
---- katalog 2.3
-------- katalog 2.3.1
---------- plik 2.3.1-1
itd.


Skrypt:
  1. <?php
  2. function all_dir($katalog = './', $cat = '', $st = '')
  3. {
  4. $dir = sort_scandir($katalog, 1); //sort_scandir własna funkcja sortująca wynik scandir
  5. $cat .= $katalog.'/';
  6.  
  7.  
  8. foreach($dir as $file)
  9. {
  10. $id  = rand(0, 999).count($dir).$i++.$cnt; //tak tworze numer id...
  11. if($file != '.' AND $file != '..' AND $file != '.htaccess')
  12. {
  13. if(is_dir($file))
  14. { 
  15. echo '<div class="file">- ['.$id.']<b>'.$file.'</b> <a onClick="javascript: ShowHide('dir_'.$id.'''button_'.$id.'');" id="button_'.$id.'">+</a><span style="display: none;" id="dir_'.$id.'">'."\n";
  16. all_dir($file, $cat);
  17. echo '</span></div>';
  18. $cnt++;
  19. }
  20. else
  21. {
  22. $size = round(filesize($file)/1024);
  23. $all_size += $size;
  24. echo '<div class="file">- <a href="'.$cat.urlencode($file).'">'.$file.'</a> <span id="filesize">('.$size.' Kb)</span></div>'."\n";
  25. }
  26. }
  27. }
  28. chdir('../');
  29. return $all_size;
  30. }
  31. all_dir();
  32. ?>


Przykład dotychczasowego działania: link
domis86
a co robi scandir?
b_chmura
manual: scandir" title="Zobacz w manualu PHP" target="_manual

sort_scandir:

  1. <?php
  2. function sort_scandir($in, $chdir = 0)
  3. { 
  4. $sd = scandir($in);
  5.  
  6. if($chdir == 1){chdir($in);} //dla indywidualnych potrzeb
  7.  
  8. foreach($sd as $file)
  9. {
  10. if(is_dir($file))
  11. {
  12. $ARRfile['1'][] = $file;
  13.  
  14. }
  15. if(is_file($file))
  16. {
  17. $ARRfile['2'][] = $file;
  18. }
  19. }
  20. foreach($ARRfile as $file)
  21. {
  22. foreach($file as $file)
  23. {
  24. $out[] = $file;
  25. }
  26. }
  27. return $out;
  28. }
  29. ?>
strife
To może DirectoryIterator snitch.gif
b_chmura
DirectoryIterator nie jest rozwiązaniem, przy użyciu tej klasy staną bym w tym samym miejscu...

czekam na dalsze pomysły rozwiązania problemu.

ps. szkoda ze dopiero teraz dowiedziałem się o tej klasie...
domis86
a co pozniej bedziesz robil z tym id? smile.gif
b_chmura
wykorzystywał do usuwania/edytowania/dodawania plików lub katalogów, ajaxowej/js'owskiej części projektu, może statystyk, wyświetlania na stronie
domis86
http://pl.php.net/manual/en/function.opendir.php

popatrz na komentarz uzytkownika:
frogstarr78 at yahoo dot com
b_chmura
Cytat(domis86 @ 25.10.2007, 14:13:43 ) *
http://pl.php.net/manual/en/function.opendir.php

popatrz na komentarz uzytkownika:
frogstarr78 at yahoo dot com


Niestety ale nic mi to nie nasunęło...
ale sam sobie z tym poradziłem, dzięki za zainteresowanie

pozdrawiam
Chmura

PS:
dla zaciekawionych rozwiązanie:

  1. <?php
  2. function all_dir($katalog = './', $cat = '', $idR = '')
  3. {
  4. $dir = sort_scandir($katalog, 1);
  5. $cat .= $katalog.'/';
  6.  
  7. $cnt = $cntP = 1;
  8. foreach($dir as $file)
  9. {
  10. if($file != '.' AND $file != '..' AND $file != '.htaccess' AND $file != 'tomasz_turon')
  11. {
  12. if(is_dir($file))
  13. { 
  14. $id = $idR.$cnt.'.';
  15. echo '<div class="file">- <b>'.$file.'</b> <a onClick="javascript: ShowHide('dir_'.$id.'''button_'.$id.'');" id="button_'.$id.'">+</a><span style="display: none;" id="dir_'.$id.'"> <span id="filesize">'.$idR.$cnt.'</span>'."\n";
  16. all_dir($file, $cat, $id);
  17. echo '</span></div>';
  18. $cnt++;
  19. }
  20. else
  21. {
  22. $size = round(filesize($file)/1024);
  23. $all_size += $size;
  24. echo '<div class="file">- <a href="'.pl($cat.$file).'">'.$file.'</a> <span id="filesize">('.$size.' Kb) '.$idR.$cntP.'</span></div>'."\n";
  25. $cntP++;
  26. }
  27. }
  28. }
  29. chdir('../');
  30. return $all_size;
  31. }
  32. all_dir();
  33. ?>


oczywiście było banalnie proste
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.