Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: generowanie listy plików - sortowanie rezultatów
Forum PHP.pl > Forum > PHP
wolguy
Witam,
mam tutaj taki skrypcik:

  1. <?php
  2.  
  3. $dir = &#092;"katalog/\";
  4. function printDir($dir)
  5. {
  6. $fd = opendir($dir);
  7. if(!$fd) return false;
  8. while (($file = readdir($fd)) !== false){
  9.  if($file != &#092;".\" && $file != \"..\"){
  10. echo(&#092;"$file<BR>\");
  11.  }
  12. }
  13. closedir($fd);
  14. }
  15. printDir($dir);
  16. ?>


który generuję listę plików z katalogu ze zmiennej $dir.
Mam problem z określeniem jak ma być prezentowana zawartość kalalogu.
Na serwerze z Windowsem lista plików jest sortowana alfabetycznie, czyli plik na literkę "a" jest pierwszy na liśce, a na "z" jest ostatni. Natomiast pod Linuxem według daty wysłania pliku na serwer.
Czy da się dodać do tego skryptu jakąs opcję żeby pod Linuxem wyniki były sortowane alfabetycznie, ale od końca? Np że plik którego nazwa zaczyna sie na literke "z" będzie pierwszy na liście, a ten na "a" będzie ostatni?

Błagam! Pomóżcie mili Panowie (albo może znajdzie sie jakaś miła Pani?) smile.gif
crash
Utwórz sobie tablicę ze spisem plików z katalogu a następnie posortuj tą tablicę tak jak chcesz.
hwao
Dobra to moze ja pokaze co tam zlozylem...
Beda potrzebne 3 pliczki dam do nich linki zeby nie zasmiecac tematu smile.gif na koniec pokaze jak to uzyc smile.gif

http://windforce.strefaphp.net/code/?file=...list.class.php5
http://windforce.strefaphp.net/code/?file=...ldir.class.php5
http://windforce.strefaphp.net/code/?file=...List.class.php5 (do sortowania intow mam inna, czyli wg wielkosci albo dat.)

Teraz zalaczamy to wszytko do 1 pliku i w nim piszemy

  1. <?php
  2.  
  3. $sortujWg = 'name'; // mozesz sobie z geta to pobrac np
  4. $sortujTyp = 'asc'; // Tutaj czyli w jakis sposob srotowac asc/desc
  5. $path = './'; // sciezka jaka ma poparsowac:)
  6.  
  7. // Tablica co jak sortowac (umnie jeszcze tu byla wielkosc i data dlatego ta tablica
  8. $sortObject = array( 
  9.  'name' => 'stringSortFileList',
  10.  'type' => 'stringSortFileList'
  11. );
  12.  
  13. // --- tu sie zaczyna dzialnie
  14. $dir = new $sortObject[$sortujWg]( new LocalDir( $path ), $sortujWg, $sortujTyp ); // utworzenie obiekt
  15. $dir->read(); // wczytuje sobie pliki
  16.  
  17. while( $file = $dir->getNext() ) { // wydobywanie po koleji
  18.  echo '<pre>'.print_r( $file, true ).'</pre>'; // wysweitlenie
  19. }
  20.  
  21. $dir->close();
  22.  
  23. ?>

No w sumie to tak dziala...
Jak chcesz prosciej to tam masz w klasie sortujacej (ta 3cia) jak uzylem array_multisort smile.gif ktora dziala dokladnie tak jak w mysql Order by smile.gif
crash
Obadałbym to, ale gdzie źródło klasy SortFileList?
hwao
Cytat(crashu @ 2005-07-01 20:25:54)
Obadałbym to, ale gdzie źródło klasy SortFileList?

Sorka zapomnialem o niej smile.gif a to dlatego ze pratycznie tylko dostarcza wygladu winksmiley.jpg moze i lepiej by to bylo na interfejsach zrobic:) (przynajmniej czesc, potem bede musial przepisac zeby uczyc intrfejsow smile.gif ale to nie wiele zmian)

http://windforce.strefaphp.net/code/?file=...list.class.php5

Zaleta tego jest ze zrodlo danych mozna sobie dopisywac dowolnie a wszytko bedzie dzialac czyli, np piszemy na tym galerie ktora pokazuje pliki z serwera, dopisuje jedna klase i moge juz np wyswietli galerie plikow z jakiegos ftp smile.gif (w sumie mam napisana juz ta klase do ftp smile.gif i dziala splicznie smile.gif )
crash
Spoko działa, ale wymagało jednej poprawki żeby w ogóle ruszyło. php rzucił Fatal error przy array_pop bezpośrednio na explode() (24 linia filelist.class.php)...
wolguy
A może spróbujemy jeszcze na tym moim kodzie, w prosty sposób.
Próbowałem z tablicą ale coś cienko mi wychodzi sad.gif

  1. <?php
  2.  
  3. $dir = &#092;"katalog/\";
  4. function printDir($dir)
  5. {
  6. $fd = opendir($dir);
  7. if(!$fd) return false;
  8. while (($file = readdir($fd)) !== false){
  9.  if($file != &#092;".\" && $file != \"..\"){
  10.  
  11.  $tablica[$file] = $file;
  12.  krsort($tablica);
  13.  
  14. while (list ($key, $val) = each ($tablica)) { // tak dla sprawdzenia
  15. echo &#092;"$key = $valn\";
  16. }
  17.  
  18.  }
  19. }
  20. closedir($fd);
  21. }
  22. printDir($dir);
  23. ?>


i po tym zamiast trzech kluczy mam aż sześć.
O co chodzi?
crash
Nie wiem co ty próbujesz tak stworzyć smile.gif
  1. <?php
  2. $dir = './';
  3. function printDir($dir)
  4. {
  5. $fd = opendir($dir);
  6. if(!$fd) return false;
  7. while(($file = readdir($fd)) !== false)
  8. {
  9. if($file != &#092;".\" && $file != \"..\")
  10. {
  11.  $tablica[] = $file;
  12. }
  13.  }
  14.  closedir($fd);
  15.  rsort($tablica);
  16.  
  17.  foreach($tablica as $file)
  18.  {
  19. echo &#092;"$filen\";
  20.  }
  21. }
  22. printDir($dir);
  23. ?>
wolguy
Zamierzam zrobić skrypt na system newsów, bez MySQLa.
W katalogu 'news' będe miał foldery - każdy na inny news. Foldery będą miały jakąś "przyjazną nazwę". W każdym folderze z newsem będzie plik 'date.txt', gdzie w formacie 'Y-m-d" będzie zapisywana data newsa. Za pomocą funckji file_get_contents będę odczxytywał zawartość 'date.txt', po czym wszystkie daty będą sortowane i będzie generowana lista newsów.

Robie to troche niestandardowo, ale taki już jestem. Poza tym mam dopiero 16 lat i praktycznie zaczynam swoją "przygodę" z php. Dziękuję wszystkim za pomoc.
crash
smile.gif Nie pytam co ty chcesz zrobić w szerszym zakresie, a tylko co ten twój skrypt z poprzedniego postu miał niby robić. Nie odbiegaj od tematu, napisz czy już wszystko rozumiesz i działa jak powinno.
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.