Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ostanio dodane zdjęcie
Forum PHP.pl > Forum > Gotowe rozwiązania > Szukam
joka2
Witam Wszystkich.

Posiadam stronę, na której umieszczam moje zdjęcia. Chciałbym dodać gadżet w postaci ostatnio dodanego zdjęcia.

- fotki znajdują się w katalogu „foto”,
- nazwy zdjęć zaczynają się od 001.jpg, 002.jpg, itd…

Skrypt miałby otworzyć katalog, wczytać do tablicy wszystkie zdjęcia, a następnie wyświetlić zdjęcie o najwyższym numerze.

Widzę to tak:
  1. <?php
  2.  
  3. //Ustalenie katalogu, w którym znajdują się zdjęcia
  4. define('KATALOG_ZDJEC','./page/foto/');
  5.  
  6. //Zmienna x zerujemy
  7. $x=0;
  8.  
  9. //Pętlą pobieramy zdjęcia z katalogu a następnie przypisujemy do zmiennej album, zwiększając o jeden
  10. foreach (glob(KATALOG_ZDJEC."*.jpg") as $zdjecie) $album[$x++]=$zdjecie;
  11.  
  12. //Wyświetlamy zdjęcie
  13. echo "<img src=\"{$album[$x]}\";
  14.  
  15. ?>

Niestety, ale nie wiem, jak mam wyświetlić ostatnie zdjęcie, które jest np. 123.jpg…

Prośba o pomoc. Przeszukałem już to forum pod tym kątem. Niestety, nic nie znalazłem.

Coś mi się udało wyczesać:
  1. <?php
  2.  
  3.    $katalog="zaw";
  4.    $dir=opendir($katalog);
  5.  
  6.    while($nazwa_pliku=readdir($dir))
  7.        {
  8.        if(($nazwa_pliku!=".")&&($nazwa_pliku!=".."))
  9.            {
  10.            $list_plikow.="<img src=./zaw/$nazwa_pliku><br>";
  11.            }
  12.        }
  13.    closedir($dir);
  14.  
  15. echo "$list_plikow";
  16. ?>

Efekt skryptu na stronie: zdjecia z katalogu.

Źródło strony wygląda tak:
  1. <img src=./zaw/002.jpg><br><img src=./zaw/001.jpg><br>


Pozostało mi tylko wyświetlenie tylko ostatniego zdjęcia z katalogu. Ktoś chce mi pomóc?

Coś czuję, że tablica będzie potrzebna...
sowiq
Zrób np. tak:

  1. <?php
  2. $max = -1;
  3. $plik = '';
  4. while($nazwa_pliku=readdir($dir)){ // ta pętla już istnieje, więc możesz ją wykorzystać
  5.    if( (int)$nazwa_pliku > $max ){
  6.        $max = (int)$nazwa_pliku;
  7.        $plik = $nazwa_pliku;
  8.    }
  9. }
  10.  
  11. // tutaj warunek, czy $plik nie jest pusta...
  12. echo 'Najnowszy plik to: '.$plik;
  13. ?>
joka2
Działa, jak ta lala!
Dziękuję sowiq za pomoc w rozwiązaniu mojego problemu smile.gif

  1. <?php
  2.  
  3.    $katalog="zaw"; // musi być katalog o nazwie na przyklad zaw
  4.    $dir=opendir($katalog); // otwieramy katalog zaw
  5.    $max = -1; // ustalamy zmienna max na -1 ale po co nie wiem...
  6.    $plik = ''; // zerujemy nazwe plik, chyba zerujemy aby nie było śmieci
  7.    while($nazwa_pliku=readdir($dir)){ // petla sprawdza czy kolejny plik w katalogu jest ostatnim
  8.        if( (int)$nazwa_pliku > $max ){
  9.    $max = (int)$nazwa_pliku; // nie czaje tej linii, ale widocznie musi byc
  10.    $plik = $nazwa_pliku; // a teraz przypisujemy do zmiennej plik zawartosc katalogu
  11.        }
  12.    }
  13.  
  14. // tutaj warunek, czy $plik nie jest pusta...
  15. echo 'Najnowszy plik to: <br><img src=./zaw/'.$plik.'>'; // wyswietlanie ostatniego pliku!
  16. ?>


Jeśli się mylę, to proszę o podpowiedź, do czego służą niektóre linie kodu.

Jeszcze raz dziękuję.
Efekt Twojej pracy znajduje się na mojej stronie (link w stopce).
Pozdrawiam.
blooregard
Cytat
Jeśli się mylę,

Mylisz się, i to bardzo. Pozwolę sobie wyręczyć sowiq'a.
Nie czaisz podstawowych pojęć:

Cytat
$max = -1; // ustalamy zmienna max na -1 ale po co nie wiem...

Inicjalizujemy ją taką wartością, po to, żeby miała jakąś wartość, z którą można byłoby ją porównać w pierwszym warunku.

Cytat
$plik = ''; // zerujemy nazwe plik, chyba zerujemy aby nie było śmieci

Inicjalizujemy pustym ciągiem. Inicjalizacja zmiennych to nawyk, który warto sobie przyswoić. W przypadku PHP, który jest językiem nie kontrolującym typu zmiennej, nie jest to konieczne (zmienną można zainicjalizować w dowolnym momencie, dowolną wartością, wtedy zmienna będzie miała typ wartości, którą ją zainicjalizowałeś), ale zalecane.

Cytat
while($nazwa_pliku=readdir($dir)){ // petla sprawdza czy kolejny plik w katalogu jest ostatni

Pętla iteruje kolejno przez wszystkie pliki w katalogu - f-cja readdir($katalog) zwraca kolejno nazwy plików w danym katalogu (http://pl2.php.net/readdir). Sprawdzenie, czy jest to ostatni plik w katalogu, byłby bez sensu, bo tu chodzi o odczytanie nazw tych plików, po kolei, wszystkich, żeby potem porównac je z oczekiwaną wartością.

Cytat
$max = (int)$nazwa_pliku; // nie czaje tej linii, ale widocznie musi byc

Ta linia rzutuje (wymusza typ zmiennej) na typ podany w nawiasie - czyli tutaj niejako "wymusza" potraktowanie nazwy pliku (będącej ciągiem znaków) jako liczby. Oczywiście byłoby to bez sensu, gdyby nazwa pliku składała się z innych znaków niz cyfry.

Cytat
$plik = $nazwa_pliku; // a teraz przypisujemy do zmiennej plik zawartosc katalogu

Nie, przypisujemy nazwę kolejnego pliku odczytanego instrukcją readdir()

Poczytaj na php.net do czego służą poszczególne funkcje, które zastosował sowiq w tym przykładzie. Wtedy będzie Ci łatwiej zrozumieć jego działanie.
Generalnie polecam zaprzyjaźnić się z dokumentacją na php.net.
joka2
To bardzo miłe @blooregard,

że podałeś mi na tacy opisy kolejnych linii kodu.

Dziękuję Ci bardzo.

Niestety,

ale zaobserwowałem problem, ponieważ w katalogu znajdują się także pliki *.txt, z opisami zdjęć...
Oczywiście mogę je (*.txt) przerzucić do innego katalogu, co już testowałem, ale czy jest możliwe ograniczenia wyników tylko do plików graficznych (*.jpg, *.png, *.gif, *.bmp)?

PS. Fajne jest to forum smile.gif
kajzur
Zamiast readdir możesz użyć funkcji glob, albo do tej dodać warunki..
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-2024 Invision Power Services, Inc.