PHP: strefaphp.net
PHP: strefaphp.net



 
Czy odwiedziłeś już te strony? -
dodał: Vengeance

Opis artykułu dodano: 23-08-2004 19:24
Z pewnością każdy z nas posiada jakieś zbiory plików graficznych na serwerze np. elementy stron, zdjęcia, rysunki itp. Ich przeglądanie jest uciążliwe, ale za pomocą PHP możemy napisać prostą przeglądarkę zdjęć. Przeglądarka będzie wyświetlać tylko pliki graficzne, będzie posiadać również przyciski typu 'dalej' i 'wstecz'. Kod zawiera tylko 24 linie i parę funkcji, które mogą przydać się przy poważniejszych aplikacjach.
dodał: kw | autor: kw | czytano: 10370 razy

Inne materiały do artykułu

Prosta przeglądarka plików graficznych w PHP
Z pewnością każdy z nas posiada jakieś zbiory plików graficznych na serwerze np. elementy stron, zdjęcia, rysunki itp. Ich przeglądanie jest uciążliwe, ale za pomocą PHP możemy napisać prostą przeglądarkę zdjęć. Przeglądarka będzie wyświetlać tylko pliki graficzne, będzie posiadać również przyciski typu 'dalej' i 'wstecz'. Kod zawiera tylko 24 linie i parę funkcji, które mogą przydać się przy poważniejszych aplikacjach.

A więc do dzieła. Najpierw musi stworzyć katalog w którym będziemy trzymać nasze fotki :) W przykładzie używam katalogu 'foto'. Jakie pliki się tam znajdują dowiemy się później. Mechanizm działa naszego skryptu jest prosty: otwiera katalog > czyta pliki > sprawdza rozszerzenie > pliki graficzne zapisuje w tablicy. Oto pierwszy element kodu:
Kod:


<?
@$katalog opendir('foto');
if (!
$katalog) die ('Nie moge otworzyc folderu');
$roz_graficzne = array('.jpg''.jpeg''.gif''.png'); 
while(
$pliki readdir($katalog)) 

  if (
$pliki != '.' && $pliki != '..'
  { 
    
$rozszerzenie strtolower(strrchr($pliki".")); 
    if(
in_array($rozszerzenie$roz_graficzne)) 
    
$lista[] = $pliki
  } 
}
?>


Pierwszych dwóch linii chyba nie trzeba tłumaczyć ;). Potem tworzymy tablicę z rozszerzeniami plików graficznych. Następnie tworzymy pętlę - za jej pomocą odczytamy wszystkie pliki z naszego katalogu. Funkcja readdir generuje dwie niepotrzebne nam pozycje: . (bieżący katalog) oraz .. (nadrzędny katalog). Dlatego za pomocą instrukcji warunkowej if pozbywamy się tych dwóch elementów :) Teraz następuje ważny punkt. Nie możemy dopuścić aby do naszej tablicy $lista dostały się pliki które nie są grafiką (obsługiwaną przez przeglądarkę)! Za pomocą funkcji strrchr rozbijamy zmienną $pliki na dwie części: to co następuje przed kropką (zazwyczaj nazwa pliku :) i to co po kropce. Nas interesuje oczywiście to co po kropce, czyli rozszerzenie :) Na wszelki wypadek zmieniamy nasze rozszerzenie na małe litery (funkcja strtolower). Za pomocą funkcji in_array musimy porównać nasze rozszerzenie z rozszerzeniami graficznymi (tablica $roz_graficzne). Jeśli te się zgadzają możemy zapisać nasz plik do tablicy $lista :) Aby sprawdzić co tam się kryje można użyć funkcji var_dump:
Kod:


<?
var_dump 
($lista);
?>


Oto mój wynik:
Cytat:

array(3) { [0]=> string(9) "foto1.gif" [1]=> string(9) "foto2.png" [2]=> string(9) "foto3.jpg" }

A więc widać, że w tablicy znajdują się tylko pliki graficzne, mimo że w folderze foto mam plik np. test.txt. Ale nasze kontrola działa, możemy spać spokojnie :)

Teraz drugi etap: trzeba teraz te pliki wyświetlić ;)
Kod:


<?
$id 
$_GET['id'];
if (!
$id$id=0;
if (
$id )
    
$id count($lista)-1;
if (
$id >= count($lista))
    
$id 0;
echo 
'<a href="przegladarka.php?id='.($id-1).'">wstecz</a> | ';
echo 
'<a href="przegladarka.php?id='.($id+1).'">dalej</a><br /><br />';
echo 
'Nazwa pliku: '.$lista[$id].'<br /><br />';
if (
$lista[$id])
    echo 
'<img src="foto/'.$lista[$id].'"><br/>';ß
?>


Trzeba wyjaśnić kilka szczegółów. Ponieważ nasze pliki mamy zapisane w tablicy (zakładam, że wiesz jak działa tablica), musimy określić indeks. Dla zdjęcia pierwszego jest to 0, dla drugiego 1 itd. Nasz indeks będziemy przekazywać przez $_GET[$id]. Czyli najpierw tworzymy krótką zmienną i jeśli $id jest 'puste' (a tak się dzieje wraz z otworzeniem pliku przegladarka.php) ustawiamy wartość na 0 (wiadomo, pierwszy element w tablicy). Teraz będą dwa if'y. Pierwszy sprawdza czy $id jest mniejsze od 0. Jeśli tak, wartość $id jest równa ilości elementów w tablicy (count() zwraca ilość) pomniejszonej o jeden. Dlaczego? Otóż chcemy, aby nasze linki dalej i wstecz działy w 'kółko', czyli jeśli klikając dalej dojdziemy do ostatniego zdjęcia i znów klikniemy dalej przejdziemy do pierwszego zdjęcia. Podobnie z wstecz. Jest to bardzo użyteczne. Wracam do pierwszego if'a. Otóż mamy taką sytuację: $id jest równe -1. Ale w tablicy nie ma indeksu -1. Dlatego wartość $id ustawiamy na 'ostatni indeks' (czyli w moim przypadku na 2, gdyż 3-1 daje 2). Drugi if sprawdza czy aby $id nie jest większe bądź równe (>=) od ilości elementów w naszej tablicy. Jeśli tak, ustawia wartość na 0. Dzięki temu link dalej działa w kółko ;) Reszta kodu jest już prościutka. Tworzymy dwa odnośniki dalej i wstecz, gdzie powiększamy lub pomniejszamy o jedne $id (przecież chcemy iść dalej lub wstecz). Potem podajemy nazwę aktualnego pliku, a na końcu korzystając z html'a pokazujemy nasz plik :) (ale najpierw dla bezpieczeństwa sprawdzamy czy aby $id nie jest puste). To by było na tyle. Koniec.
Aha, dodam jeszcze, że naprawdę warto korzystać z funkcji var_dump, sami się przekonacie ;)

Ciao, tojakw(at)o2(dot)pl

Odnośniki do funkcji użytych w tym arcie (manual PHP):
pl.php.net/opendir
pl.php.net/readdir
pl.php.net/strtolower
pl.php.net/strrchr
pl.php.net/in_array
pl.php.net/count
pl.php.net/var_dump
PHP: strefaphp.net
wyślij email informacje forum download skrypty katalog kursy porady artykuły home współpraca reklama kontakt