Fotogalerie bez databáze - využívá adresářů - ukázka zdrojového kódu zdrojový kód

<?

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///Dobrý den, jsem rád, že jste se rozhodli vyzkoušet mojí fotogalerii.
/// autor: Jan Kosnar
/// honza.kacko@seznam.cz
/// prozatímní www : www.honzakacko.tk, patrně zde naleznete novější verze této galerie
/// verze 1.1.2 (6.3.2005)
///Pokud by se Vám moje galerie opravdu líbila a našli by jste pro ní uplatnění, prosím upozorněte mě na to, zařadím vás na seznam
/// spokojených uživatelů
///Tato galerie je volně šiřitelná, můžete jí jakkoliv pozmněnovat, avšak Vás žádám, ponechte přiloženu vždy alespoň informaci o autorovi, můj e-mail
///
///
///
///galerie umožňuje:
///sama si vytáří náhledy obrázků
///snadné procházení dvěma různými způsoby (gallery browser zobrazí vše najednou, galerie pomocí náhledů)
///řadí fotografie podle data přidání
///komentovat fotografie (každou zvlášť)
///stylopis CSS je psán přímo do souboru pro snadnou editaci
///
///
///potřebujete:
///neměnit název souboru galerie.php
///mít práva pro zápis do adresáře
///vyžaduje mít v php nainstalováno gd2
///
///
///
///
///INSTALACE:
///Nahrajte soubor galerie.php (nepřejmenovávat) do libovolného adresáře (např. GALERIE)
///V tomto adresáří vytvořte libovlné množství PODADRESÁŘŮ do kterých nahrajte své fotografie
///Galerie si sama najde všechny fotografie v podadresářích!!!!
/// 
///
///prosím čtěte poznámky v programu,
///
///
/// pozor: soubory v galerii jsou řazeny podle data, pokud mají dva soubory stejné datum, zobrazí se pouze jeden z nich
/// v takovém případě doporučuji použít zavolat cast tohot skriptu ktera vam vyrobi u kazdeho souboru jine datum ulozeni
/// zavolejte tedy odkaz           galerie.php?id=udrzba                 , pozor mozna bute musec pomoci chmod nastavit spravna prava k souborum
///
///hodně štěstí
/// doporučení na závěr: odkazujete-li na svých stránkách do fotogalerie, zahrňte již cestu k prvnímu adresáři s fotkamy, např galerie.php?cesta=foto1
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////





?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Fotogalerie</title>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">

<style type="text/css">
<!--
.nadpis {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 14px;
    font-weight: bold;
    color: #006600;
    background-color: #00CC00;
}

.text-kniha-jmeno {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 12px;
    color: #00CC00;
    font-weight: bold;
}


.text-kniha-prispevek {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 12px;
    font-weight: normal;
    color: #000000;
    text-decoration: none;
    background-color: #009900;
}
a {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 12px;
    font-weight: bold;
    color: white;
    text-decoration: none;
    font-variant: small-caps;
    filter: FlipH;
}
a:hover {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 12px;
    font-weight: bold;
    color: #00FF00;
    text-decoration: none;
    font-variant: small-caps;
}

-->
</style>

<body style="margin-bottom: 0px; margin-right: 0px; margin-left: 0px; margin-top: 0px; background: black; color: white" >


<div style="position: absolute; left: 0px; width: 200; top: 2px; overflow: hidden; height: 50px; background-color: #000000; font-family: verdana; font-size: 20px"><strong>FOTOGALERIE</strong></div>
<? 
///////////////////////////////////////////////NADPIS VAŠÍ FOTOGALERIE

?>
<? 
if($id == ""): ?>
<?

 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
$oa = array("notgal""temp");
/// do této proměné vepište adresáře které si NEpřejete zahrnout do vaší fotogalerie, oddělujte čárkami, pište každé zvlášť do uvozovek, to samé prosím učintě ještě v části "gallery browser"
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

$adresar Dir (getcwd());
while (
$polozka=$adresar->read()):
    
    if (
Is_Dir($polozka) and $polozka !="." and $polozka !=".."):

    
$pp[] = $polozka ;
    
    endif;
endwhile;
$adresar->close();

$ppv array_values(array_diff ($pp$oa));


?>
<div style="position: absolute; left: 200px; top: 5px; overflow: hidden; height:15px; background-color: #000000; font-family: verdana; font-size: 15px">
<? ///////////////////////////////////////////////////// MENU
echo "<span > adresáře:</span>";
for (
$i 0$i Count ($ppv); $i++):
echo 
" <a href=\"galerie.php?id=&cesta=$ppv[$i]\">$ppv[$i]</a> ";
endfor;

?>
</div>
<?












/////
$adresar Dir ("./$cesta");
while (
$polozka=$adresar->read()):
    
$date filemtime("./$cesta/" .$polozka);
    
$pp[$date] = $polozka;
endwhile;
$adresar->close();
ksort($pp);

$polepolozek array_values($pp);


for (
$i 0$i Count ($polepolozek); $i++): 

        
$cast explode("."$polepolozek[$i]);

                
        for (
$j 0$j Count ($cast); $j++):

 
        if ((
$cast[$j]=="jpg" or $cast[$j]=="JPG")  && $cast[$j+1]!="thumb" && $cast[$j+2]!="jpeg"):
        
                
            
$polejpegu[] = $polepolozek[$i];
        
        
        endif;
        
        endfor;


endfor;

    
///    
        
for ($i 0$i Count ($polejpegu); $i++):

    
$puvodniobrazek=$polejpegu[$i];
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////    
$sirka=150;
$vyska=150;
/// tyto dvě proměnné určují velikost vytvářeného náhledu
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


if (!file_exists("./$cesta/$puvodniobrazek.thumb.jpeg")):
   
$dataobrazku getimagesize("./$cesta/".$puvodniobrazek);

   if (
$sirka && ($dataobrazku[0] < $dataobrazku[1])): 
         
$sirka = ($vyska $dataobrazku[1]) * $dataobrazku[0];
   
   else:
         
$vyska = ($sirka $dataobrazku[0]) * $dataobrazku[1];
  
   endif;
   
   
$nahled ImageCreateTrueColor($sirka,$vyska);

   
$obrazek ImageCreateFromJpeg("./$cesta/".$puvodniobrazek);

   
imagecopyResampled ($nahled$obrazek0000$sirka$vyska$dataobrazku[0], $dataobrazku[1]);

   
ImageJpeg($nahled"./$cesta/" .$puvodniobrazek .".thumb.jpeg"70);
            
$obrazek="";
    endif;
        endfor;




for (
$i 0$i Count ($polejpegu); $i++):


$puvodniobrazek=$polejpegu[$i];
$dataobrazku getimagesize("./$cesta/".$puvodniobrazek);

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

if ($dataobrazku[0] < "600"): $velkasirka=$dataobrazku[0]; 
    else: 
$velkasirka="600";
    endif;
/// Zde můžete nastavit velikost zobrazovaného obrázku, nyní je to 600, na vás je pouze nahradit toto číslo (2x) vámi zvoleným.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

if ($obrazek == $polejpegu[$i]): 

?>
<div style="position: absolute; left: 180px;  top: 53px; ">

<?  //////////////////////////////////////// odsazení vlastní fotografie


echo "<center><img  border = \"0\" src=\"" .$cesta ."/" .$polejpegu[$i] ."\"" ." width=\"" .$velkasirka ."\"></center><br>" ;
$zobdat filemtime ("$cesta/$polejpegu[$i]");
echo 
"<center><span class=\"text-kniha-odkaz\">" .(Date("H:i:s" .", "  "j. " "m. " "Y "$zobdat)) ."</span></center><br>";
endif;

endfor;


if (
$obrazek != ""):  ?>

                    
<div class="nadpis">komentáře</div>
<form method="post">

<span class="text-kniha-jmeno">Od: </span><input name="jmeno" type="text"   size="15" maxlength="60" style="background-color: #009900; border-width: 0px; height: 20 px" >
 
<span class="text-kniha-jmeno">Komentář:  </span><textarea cols="25" rows="1"  name="koment"  style="background-color: #009900; border-width: 0px; height:20px"></textarea>

<input type="submit"  value="Odeslat" style="background-color: #00CC00; border-width: 0px">

<input type="hidden" name="odeslano" value="ano">
</form>
    
<?    
if ($odeslano=="ano"):    
if (
$jmeno == ""):
    
$jmeno "Anonym";
endif; 
if (
$koment != ""):                                            
$jmeno "<span class=\"text-kniha-jmeno\">$jmeno</span>";
                
$koment HTMLSpecialChars($koment);

$koment Trim($koment);            


$koment Str_Replace("\n"," <BR> "$koment);    


    
$slovo Split("[[:blank:]]+"$koment);                        

    for(
$y=0;$y<Count($slovo);$y++):
        
$slovo[$y] = Trim($slovo[$y]);                            
                                
                    
        
$celek .= $slovo[$y] . " ";                    
                    
    endfor;

$koment =  $celek;


$koment Str_Replace("&lt;b&gt;""<b>"$koment);
$koment Str_Replace("&lt;/b&gt;""</b>"$koment);

$koment Str_Replace("&lt;i&gt;""<i>"$koment);
$koment Str_Replace("&lt;/i&gt;""</i>"$koment);

$koment Str_Replace("&lt;u&gt;""<u>"$koment);
$koment Str_Replace("&lt;/u&gt;""</u>"$koment);

$koment "<div class=\"text-kniha-prispevek\">$koment</div>";

$cesta2 "<!-- ,$cesta-$obrazek, ****<a href=\"galerie.php?id=&amp;obrazek=$obrazek&amp;cesta=$cesta\">Tento obrázek </a>**** --> \n";
$ip "<!--  ($REMOTE_ADDR) -->";

$write StripSlashes($ip .$jmeno .$koment .$cesta2);                        //odstraneni  koncu radku

if (File_Exists ("galerie-data.dat")):                                            
    
$fp FOpen ("galerie-data.dat""r");
    
        
$zaloha File ("galerie-data.dat");
            if (
Count($zaloha)>10):
                
copy ("galerie-data.dat""galerie-data.dat.zaloha");
            endif;
    
    
$data FRead ($fpFileSize("galerie-data.dat"));                            
    
FClose($fp);                                                        
endif;
    
$fp FOpen ("galerie-data.dat""w");
                                            
    
FWrite ($fp$write.$data);
    
FClose($fp);    
?> <div class="nadpis">Komentář odeslán!</div> <?
endif;
$data2 File ("./galerie-data.dat");

for (
$i 0$i Count ($data2); $i++): 


    
$slovo explode(","$data2[$i]);

                
        for (
$j 0$j Count ($slovo); $j++):

 
        if (
$slovo[$j]==$cesta."-".$obrazek):
        echo 
$data2[$i];
        endif;
        
        endfor;


endfor;


else:                                        


$data2 File ("./galerie-data.dat");

for (
$i 0$i Count ($data2); $i++): 


    
$slovo explode(","$data2[$i]);

                
        for (
$j 0$j Count ($slovo); $j++):

 
        if (
$slovo[$j]==$cesta."-".$obrazek):
        echo 
$data2[$i];
        endif;
        
        endfor;


endfor;
endif;
?>
<br><br><br>
</div>







<? endif;
?>
<div style="position: absolute; left: 0px; width: 170; top: 50px; overflow: auto; height: 89%; background-color: #000000">
<? /////////////////////////////////////////////////////// zde nezapomeňte změnit width pokud měníte velikost náhledů

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// V tomto odstavci můžete měnit kolik náhledů zobrazovat na stránku (v budocnu na to udělám proměnou, nyní vám znázorním co dělat
/// pokud chcete změnit počet náhledů na stránce např. na 20
///

if (!IsSet($idprispevek)): 
        
$idprispevek=1;
                        
    endif;
        
$zacatek $idprispevek*5-5;                                        //// sem přijde 20-20
        
$konec $idprispevek*5-1;                                    /// 20-1        

    
    
for ($j=$zacatek;$j<=$konec;$j++):
    if (
$polejpegu[$j] != ""):
echo 
"<center><a href=\"galerie.php?id=&amp;idprispevek=$idprispevek&amp;obrazek=" .$polejpegu[$j] ."&amp;cesta=" .$cesta ."\"><img border=0 src=\"".$cesta ."/" .$polejpegu[$j] .".thumb.jpeg" ."\"></a></center>";
    
    endif;

endfor;


$strana Ceil(Count($polejpegu)/5);                                        /// sem 20
?> </div>
<div style="position: absolute; left: 0px;  top: 30px;  background-color: #00CC00">
<? //////////////////////////////////////////////////// upravuje polohu  odkazů na jednotlivé stránky
    
echo "&nbsp;<span  style=\"color: red; font-weight: bold; font-size: 9px \">" ."(" .($idprispevek*5-4) ."-" .($idprispevek*5).")" ." </span>";     //// sem 20-19 a 20

    
for ($x=1;$x<=$strana;$x++):        
        echo 
"<a href=\"galerie.php?cesta=$cesta&amp;id=&amp;idprispevek=$x\" style=\"font-size: 9px\">" . ($x*5-4) . "-"  $x*" </a> ";   ///// sem 20-19 a 20
    
endfor; 
    
    echo 
"&nbsp;&nbsp;<a href=\"galerie.php?id=galbrow&cesta=$cesta\" style=\"font-size: 10px\" >gallery browser</a> ";


/// tady končí nastavení počtu na stránku
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
?>







































<?

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///Gallery browser je rozšíření, které automaticky vypisuje všechny adresáře vaší galerie a umožňuje prohlížet jejich obsah najednou.
///volá se pomocí proměnné id="galbrow", odkaz na něj tedy bude vypadat následnovně
////http://www.neco.cz/galerie.php?id=galbrow
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
?>


<? elseif($id == "galbrow"): 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// doporučuji do tohoto odkazu dopsat cestu k prvnímu adresáří vaší fotogalerie 
?>
<br><br><br><a href="galerie.php">zpět do galerie</a><br><?
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////





/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
$oa = array("notgal");
/// do této proměné vepište adresáře které si NEpřejete zahrnout do vaší fotogalerie, oddělujte čárkami, pište každé zvlášť do uvozovek
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

$adresar Dir (getcwd());
while (
$polozka=$adresar->read()):
    
    if (
Is_Dir($polozka) and $polozka !="." and $polozka !=".."):

    
$pp[] = $polozka ;
    
    endif;
endwhile;
$adresar->close();

$ppv array_values(array_diff ($pp$oa));
echo 
"<span class=\"text-kniha-prispevek\"> adresáře:</span>";
for (
$i 0$i Count ($ppv); $i++):
echo 
" <a href=\"galerie.php?id=galbrow&cesta=$ppv[$i]\">$ppv[$i]</a> ";
endfor;
echo 
"<br><div class=\"text-kniha-prispevek\"> $cesta </div><br>";

$adresar2 Dir ("./$cesta/");
while (
$polozka2=$adresar2->read()):
    
$date filemtime("./$cesta/" .$polozka2);
    
$pp2[$date] = $polozka2;

endwhile;

ksort($pp2);

$pp2 array_values($pp2);



$data2 File ("./galerie-data.dat");


for (
$i 0$i Count ($pp2); $i++): 

        
$cast explode("."$pp2[$i]);

                
        for (
$j 0$j Count ($cast); $j++):

 
        if ((
$cast[$j]=="jpg" or $cast[$j]=="JPG")  && $cast[$j+1]!="thumb" && $cast[$j+2]!="jpeg"):
        
                
            echo 
"<img src=\"$cesta/$pp2[$i]\"> <br>";
            
$obrazek $pp2[$i]; 
            


                for (
$k 0$k Count ($data2); $k++): 


                    
$slovo explode(","$data2[$k]);

                
                    for (
$l 0$l Count ($slovo); $l++):

 
                        if (
$slovo[$l]==$cesta."-".$obrazek):
                        echo 
$data2[$k];
                        endif;
        
                    endfor;


                endfor;

            echo 
"<a href=\"galerie.php?id=&amp;obrazek=$obrazek&amp;cesta=$cesta\">Komentovat</a><br><br>";





        
        


        endif;
        
        endfor;


endfor;









////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// nasledujci skriptik resi problem se stejnymi daty u obrazku, jeho prubeh muze trvat delsi dobu v zavislosti na poctu fotografii, nezapomente
/// zadat cestu, pozor take na nastaveni "maximum execution time" ve vašem php
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
elseif($id == "udrzba"):

$adresar Dir ("./$cesta/");
while (
$polozka=$adresar->read()):
    if (
$polozka !="." and $polozka !=".."):
    
sleep(2);                 //// Zde může být i 1 - ušetříte tím čas....na Windows občas dělá neplechu
    
touch("$cesta/$polozka",time());    
    endif;

endwhile;

echo 
"hotovo";

endif;






////Opravdu jste dočetli až sem???
?> 




</body>
</html>
Vložil/Poslal/Autor: Jan Kosnar
Funkčnost: běží na straně serveru, nemělo by záležet na typu prohlížeče
zavřít okno | jít na hlavní stránku JakNaWeb.com