Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] jak wyświetlić nazwę pliku bez rozszerzenia
Forum PHP.pl > Forum > Przedszkole
hiszpanespaniol
witam. mam skrypt pobierający listę plików z podkatalogu i tworzący z niej menu. Problem polega na tym, że w linkach menu wyświetla mi się także rozszerzenie pliku, co oczywiście nie jest porządane. Podmieniałem już zmienną $klucz na wszystkie które się w skrypcie znajdują, ale albo wyświetla mi samo rozszeżenie, albo "array". Jest sposób na wyświetlenie samej nazwy plików, bez rozszeżenia?
  1. <?php
  2. $folder = dir('empik');
  3. while($plik = $folder->read()) {
  4. if (($plik != '.') AND ($plik != '..')) {
  5.  $nazwa = pathinfo($plik);
  6.  $pliki[$nazwa['basename']] = $nazwa['extension'];
  7.  $dodaj = true;
  8.  for($i=0;$i<count($typ);$i++)
  9. if ($typ[$i] == $nazwa['extension']) $dodaj = false;
  10. if ($dodaj == true) $typ[] = $nazwa['extension'];
  11.  }
  12. }
  13. $folder->close();
  14. for($i=0;$i<count($typ);$i++) {
  15.  echo '<ul>';
  16.  foreach($pliki as $klucz => $wartosc)
  17. if ($wartosc == $typ[$i]) echo '<li><a href="empik/' .$klucz. '">' .$klucz. '</a></li>';
  18.  echo '</ul>';
  19. }
  20. ?>
soulreaver1
Jestem jeszcze słaby w php, ale ja robiłem to za pomocą polecenia substr (chodzi o to aby obciąć ostatnie 4 znaki nazwy pliku, gorzej gdy rozszerzenie jest 5 znaków np. .html).

to będzie coś takiego:

  1. <?php
  2. $namef = substr("$file", 0, -4);
  3. ?>
santalam
Sprawdź:
  1. <?php
  2. $nazwapliku = explode('.' $nazwapliku); //rozdzielasz stringa po kropkach. Np. nazwa.pliku.html na $nazwapliku[0]=nazwa; 
  3.  // $nazwapliku[1]=pliku; $nazwapliku[2]=html; 
  4.  
  5. for(i=0; i<count($nazwapliku); i++) //count zlicza ilość wierszy w tablicy
  6. {
  7. if(i=0) $basename = $nazwapliku[i];  // dla i=0, czyli dla pierwszego wiersza z tablicy nie dodajemy kropki na pocz
  8. tku
  9. else $basename .= '.'.$nazwapliku[i];  // dla każdego kolejnego dodajmy kropkę
  10. }
  11.  
  12. echo $basename;  // powinno wyświetlić nazwa.pliku
  13. ?>


Powinno działać winksmiley.jpg
batman
  1. <?php
  2. $plik = 'nazwa.jpg';
  3. echo substr($plik, 0, strrpos($plik, '.'));
  4. // wyswietla: nazwa
  5. ?>
santalam
batman :] zapomniałem że strrpos() wogóle istnieje winksmiley.jpg Skorzystaj z rozwiązania batamana winksmiley.jpg
pablos02
Może dla początkójących takie zadanie jest trudne ale wystarzy tylko trochę nad tym pomyśleć:)
webdice
  1. <?php
  2.  
  3. $folder = dir('empik');
  4.  
  5. while ($plik = $folder->read ())
  6. {
  7. if (($plik != '.') AND ($plik != '..'))
  8. {
  9. $file = pathinfo ($plik);
  10.  
  11. print $file['filename'] . '<br />';
  12. }
  13. }
  14.  
  15. ?>
hiszpanespaniol
webdicepl dzięki za pomoc. widać PHP jak matematyka - najprostsze rozwiązania okazują się najlepsze smile.gif. Odrobinę zmieniłem skrypt w ten sposób żeby wyświetlało linki, pliki docelowe miały rozszerzenie i żeby to było menu (oczywiście do obróbki w css):
  1. <?php
  2. $folder = dir('empik'); 
  3. echo '<ul>';
  4. while ($plik = $folder->read ())
  5. { 
  6. if (($plik != '.') AND ($plik != '..'))
  7. {
  8. $file = pathinfo ($plik);
  9. echo'<li><a href="empik/' .$plik. '">' .$file['filename']. '</a></li>';
  10.  echo '</ul>';
  11. }
  12. }
  13. ?>
webdice
  1. <?php
  2. echo '</ul>';
  3. ?>


Echo daj za klamrą do pętli.
hiszpanespaniol
wykorzystałem ten sposób w tworzeniu szablonu. Teraz niestety menu mi nie działa (wyświetla dobrze, linki tworzy dobre, a jednak za każdym razem ładuje się strona główna). Nie wiem w czym problem, bo zmienna GET jest przekazywana prawidłowo. Może powodem jest to, że menu include'owane jest w pliku index.php, nie wiem. Może ktoś pomóc? nakierować?

daję link do spakowanego szablonu
szablon.zip
isso
  1. <?php
  2. $strona = $_GET['wyswietl'];
  3. if (is_file("podstrony/$strona.html"))
  4. { 
  5. include("gora.html");
  6. include("podstrony/".$strona.".html");
  7. include("dol.html");
  8. }
  9. else
  10. {
  11. include("gora.html");
  12. include("podstrony/glowna.html");
  13. include("dol.html");
  14. }
  15. ?>


wklej to zamiast aktualnego indeksu ;-) u mnie działa smile.gif
hiszpanespaniol
człowiek jest czasem ślepy jak.... jak ślepiec smile.gif głupie przeoczenie. Dziękuję
guitarnet.pl
zerknij tutaj, bardzo prosta metoda dająca gwarancję że otrzymasz to co chcesz

http://skrypta.pl/porada/ja_wyswietlic_naz...ozszerzenia/104

pamiętaj że korzystanie z strpos() czy substr() poprzez obcinanie względem kropki zakończy się nieoczekiwanym rezultatem jesli plik ma więcej niż jedna kropkę!
hiszpanespaniol
kolejny problem: nie mam pojęcia na jakiej zasadzie (wg czego) sortowane są wyniki. Czyli jak jest sortowana lista plików. Żeby chociaż alfabetycznie. Nie interesuje mnie dzielenie według rozszerzenia, bo wszystkie pliki to *.html. W manualu nie znalazłem odpowiedzi (czytając o readdir). Chcę uzyskać menu sortowane alfabetycznie lub wg daty modyfikacji pliku.
Oto skrypt ten sam co wcześniej:

  1. <?php
  2. $folder = dir('empik'); 
  3. echo '<ul>';
  4. while ($plik = $folder->read ())
  5. { 
  6. $zamiana_znakow = str_replace("-"," ",$plik);
  7. if (($zamiana_znakow != '.') AND ($zamiana_znakow != '..'))
  8. { 
  9. $file = pathinfo ($zamiana_znakow);
  10. echo'<li><a href="index.php?wyswietl=' .$file['filename']. '">' .$file['filename']. '</a></li>';
  11. }
  12. }  echo '</ul>';
  13. ?>

(W skrypcie dodałem jedynie możliwość wyświetlania kilkuwyrazowych pozycji w menu. spacja w menu zamiast myślnika w nazwie pliku)

Możliwe, że problem ma związek z tym, że . i .. były wyświetlane gdzieś w środku listy plików a teraz je pomija skrypt.
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.