MOJA PASJA - PROGRAMOWANIE
   Dzisiaj jest Wtorek, 13 maja, 2008r. Ostatnia aktualzacja miała miejsce: 10 grudnia 2006r. Homepage

Programowanie: Artykuły * FAQ * Download * Komponenty * Książki WWW: Artykuły * Narzędzia * Kursy * Darmowe * FAQ * Skrypty * Ksiązki Off-Topic: Aforyzmy * Humor Inne: Forum * Wiki * Liczniki * Linki * Chat * Grafika * Video * Inne



Galeria zdjęć




   Założenie

   Mamy na serwerze folder "./fotosy", do którego dodajemy sukcesywnie nowe pliki w formacie jpg/jpeg. Chcemy stworzyć skrypt "./install.php", który po uruchomieniu sprawdzi zawartość folderu, stworzy w nim miniaturki "./fotosy/min_xxxxxx.jpeg" oraz plik "./fotosy/dane.txt" zawierający ich nazwy i rozmiary. Potrzebny nam będzie także plik "./index.php", który na podstawie pliku "./fotosy/dane.txt" wyświetli małe zdjęcia w postaci link'ów do dużych. Będzie on wykorzystywał JavaScript w celu otworzenia zdjęcia w nowym oknie dopasowanym do jego rozmiarów.

   Uwagi

   Użyte w przykładzie funkcje obsługiwane są przez wersje PHP 3 >= 3.0.16 oraz PHP 4 >= 4.0.0

   Powodem nie działania skryptu mogą być niewłaściwe prawa dostępu ustawione na ten że skrypt folder ze zdjęciami czy same zdjęcia.

   Jeżeli w folderze znajdzie się zbyt dużo nowych zdjęć z których mają zostać utworzone miniaturki to czas wykonywania takiej operacji może przekroczyć limit 30 sekund przydzielonych na wykonanie skryptu na serwerze.

   Plik: install.php


<?

$fol
= "./fotosy"; // folder ze zdjęciami
$prfx = "min_"; // prefix poprzedzający nazwy miniaturek
$i = 0;

$naz = array();
$dane = @file($fol."/dane.txt");
if(
is_array($dane)) foreach($dane as $v) {
  
$t = explode("|", $v);
  
$naz[] = $t[0];
}

$uchwyt = opendir($fol);
while(
false !== ($plik = readdir($uchwyt)))
  if(
is_file($fol."/".$plik) &&
  (!
is_file($fol."/".$prfx.$plik) || !in_array($plik, $naz)) &&
   
substr($plik, 0, strlen($prfx)) != $prfx &&
   
ereg("^.+\.jpe?g$", $plik)) {
    
$org = imagecreatefromjpeg($fol."/".$plik);
    
$s_org = imagesx($org);
    
$w_org = imagesy($org);
    
$s_min = 100;
    if((
$w_min = floor(($s_min * $w_org) / $s_org)) > 150) $w_min = 150;
    
$min = imagecreate($s_min, $w_min);
    
imagecopyresized($min, $org, 0, 0, 0, 0, $s_min, $w_min, $s_org, $w_org);
    
imagedestroy($org);
    
imagejpeg($min, $fol."/".$prfx.$plik, 50);
    
imagedestroy($min);
    if(
in_array($plik, $naz)) unset($dane[array_search($plik, $naz)]);
    
$dane[] = "$plik|$s_org|$w_org|$prfx$plik|$s_min|$w_min\n";
    
$i++;
}
closedir($uchwyt);


$fp = fopen($fol."/dane.txt", "w");
flock($fp, 2);
fputs($fp, str_replace("\r", "", join("", $dane)));
flock($fp, 2);
fclose($fp);

echo
"Ilość utworzonych miniaturek: ".$i;

?>

   Plik: index.php


<html>
<head>
<script type="text/javascript">
<!--

function okno(p,s,w) {
  w=open('','','width='+s+',height='+w);
  with(w.document) {
   write('<html><head><title>'+p+'</title></head><body background="'+p+'"');
   write(' onMousedown="self.close()"></body></html>');
   close();
  }
}

//-->
</script>
</head>
<body bgcolor="#008000">
<table align="center">
<tr><td valign="top"><?

$ile
= 4; //ilość zdjęć w jednym wierszu tabeli
$fol = "./fotosy"; //folder ze zdjęciami
$i = 1;
$dane = @file($fol."/dane.txt");
if(
is_array($dane))
  foreach(
$dane as $v) {
   
$d = explode("|", chop($v));
   echo
"<a href=\"$fol/$d[0]\" onClick=\"okno('$fol/$d[0]',$d[1],$d[2]); return false\">".
      
"<img src=\"$fol/$d[3]\" width=\"$d[4]\" height=\"$d[5]\"></a>".
      (
$i == $ile ? "</td></tr><tr><td valign=\"top\">" : "</td><td valign=\"top\">")."\n";
   
$i < $ile ? $i++ : $i = 1;
  }

?></td></tr>
</table>
</body>
</html>

   Zaprezentowane tu rozwiązania są przykładowe i należy je dostosować do własnych potrzeb.



   Wasze opinie:
   Średnia ocena: 5.98/10 (88 głosów)
   
   Liczba komentarzy: 49 (pokaż wszystkie)Skomentuj !   


Autor: sq6rrData dodania: 2008-03-01
Skrypt jest ok. Działa poprawnie, jednak prostota uniemożliwia bezpośrednie użycie go na stronie. Zawiera jednak wskazówki, jak należy taką galerię stworzyć. Polecam jako zalążek do dalszej nauki. Do działania skryptu wymagana jest instalacja GD2, bo bez tego nie ruszy!!


Autor: JarooData dodania: 2008-02-22
Straszny shit ... NIE DZIAŁA!


Autor: maxData dodania: 2008-02-06
i na cholere umieszczac jakies gowniane skrypty - jak cos juz robisz to rob to dobrze a nie smiecisz net... nawet lamer z ciebie nedzny hehehehe


Autor: TKData dodania: 2008-01-21
Witam. Pojawiło mi się zielone tło ze znaczkami : ". "". ($i == $ile ? " " : " ")."\n"; $i < $ile ? $i++ : $i = 1; } ?> a w logach serwera: The given path misformatted or contained invalid characters: Cannot map GET /%22$fol/$d[3]/%22 HTTP/1.1 to file, referer: http://localhost/ Czy to jest błąd nazwy pliku ?? Może mi ktoś pomóc - wyjaśniając w/w zjawisko ??


Autor: kolega zachyData dodania: 2008-01-15
Zacha do dopisz sobie miniaturki a nie tylko na gotowce liczysz .... Weź się do roboty i naucz się czegoś wkońcu


Autor: SergioData dodania: 2007-11-17
Całkiem dobry art. Problem ze zbyt długim czasem robienia miniatur, można obejsc stosując skrypt" #!/bin/bash for i in *.JPG; do convert -size 134x100 $i -resize 134x100 min/min_$i;done" Skrypt generuje miniatury do podkatalogu "min" i dodaje do nazwy miniatury"min_". Nie wiem jak na window$ ale na linuxie to niema najmniejszego problemu. aa skrypt wymaga zainstalowania imagemagic.


Autor: adaxmaxData dodania: 2007-11-03
Witam serdecznie mam problem z tym skryptem niby robie tak jak pisze autor skryptu ale nie wychodzi mi i mam tylko zielone tło jakby mógł mi ktoś podpowiedzieć co robie nie tak to byłbym wdzięczny i jak mam stworzyć ten plik dane.txt i gdzie go umieścić



Stronę przygotował: Kacper Cieśla (comboy). Wszelkie prawa zastrzeżone.
Reklama * Zgłoś błąd * Kontakt * Hosting * O stronie * Sponsoring
Czas generowania strony: 0.465s