Tein kuvagalleriaa, jonka toiminta perustuisi siihen että tietyssä kansiossa olevat kuvat käydään läpi mutta olen törmännyt pieniin ongelmiin. Eli miten saan 'poistettua' muut kuin kuvatiedostot, siten ettei skripti yrittäisi näyttää niitä, jos kuvatiedostoja on hakemistossa. Lisäksi kuvagalleria tulostaa vain tekstin "Gallerian tietoja ei löytynyt", jos kuvaid:tä ei ole määritelty. Missäköhän voisi olla vika?
Lisäksi yritin tehdä kommentointijärjestelmää, mutta se hieman sohlasi. kommentointiskripti(alempi) ei kirjoittanut "kommentit/" hakemistossa olevaan tiedostoon vaan teki uuden, päätteettömän tiedoston samaan hakemistoon itse skriptin kanssa.
Pistän tähän nämä skriptien koodit.
<?php #Tämä skripti on kuvagalleria, joka toimii hyvin helposti vain siten että kuvat ovat yhdessä ennalta määrätyssä kansiossa. Kuvia voi toivottavasti kommentoida. #muutamia asetuksia. $hakemisto = "kuvat/"; //hakemisto jossa kuvat lymyää $kommentit ="kommentit/"; //missä kommentit sijaitsevat. kommentit perustuvat siihen että kommenttitiedoston nimi on sama kuin kuvannimi $indeksi ="galleria_index.txt"; //missä filussa on tietoa galleriasta #itse ohjelma alkaa tästä $kuvat = opendir($hakemisto); //avataan hakemisto, jossa kuvat on $nimi =readdir($kuvat); //avataan hakemisto $tiedostot = array(); //taukko, johon kuvat laitetaan while($nimi) { $tiedostot[]=$nimi; $nimi =readdir($kuvat); } closedir($kuvat); //tarkistetaan, josko olisi tietoa gallerian selostuksesta if(file_exists($hakemisto.$indeksi)) { if($hakemisto !=".." or $hakemisto !=".") { include($hakemisto.$indeksi); echo "<br>"; } } else { echo "<h2>Nimetön galleria</h2><p>Gallerian tietoja ei löytynyt.</P>"; } //seuraavaksi jännä kohta. kuvannäyttäminen :D //tarkistetaan mikä kuva halutaan näyttää, ja onko sellaista kuvaa olemassa:D if(isset($_GET['kuvaid'])) { $kuvannumero=$_GET['kuvaid']; if(file_exists($hakemisto.$tiedostot[$kuvannumero]) ) { echo "<img src='".$hakemisto.$tiedostot[$kuvannumero]."'>"; if(file_exists($kommentit.$tiedostot[$kuvannumero].".txt")) { include($kommentit.$tiedostot[$kuvannumero].".txt"); echo "<form action='kommentoikuvia.php?id=".$kuvannumero."' method='post'>"; echo "<textarea name='kommentti' cols='20' rows='5'>"; echo "<input type='submit' value='Lähetä'>"; } else { echo "<p>Ei kommentteja vielä.</p>"; echo "<form action='kommentoikuvia.php?id=".$kuvannumero."' method='post'>"; echo "<textarea name='kommentti' cols='20' rows='5'>"; echo "<input type='submit' value='Lähetä'>"; echo "</form>"; } echo "<br><a href='kommentoitavagalleria.php?kuvaid=".$kuvannumero++."'>Seuraava</A>"; } else { //jos ei ole määritelty kuvaid:tä, niin asetetaan se nollaksi header("location:".$_SERVER['PHP_SELF']."?kuvaid=0"); } } ?>
Ja sitten tuo kommentointiskripti johon viitataan yllä olevassa skriptissä.
<?php //kommentoi.php voi kommentoida kuvia $hakemisto = "kuvat/"; //hakemisto jossa kuvat lymyää $kommentit ="kommentit/"; //missä kommentit sijaitsevat. kommentit perustuvat siihen että kommenttitiedoston nimi on sama kuin kuvannimi $indeksi ="galleria_index.txt"; //missä filussa on tietoa galleriasta if(isset($_GET['id']) AND isset($_POST['kommentti'])) { $nimi =readdir($hakemisto); $tiedostot = array(); while($nimi) { $tiedostot[]=$nimi; $nimi =readdir($hakemisto); } closedir($hakemisto); if(file_exists($hakemisto.$tiedostot[$_GET['id']])) { $kom=fopen($kommentit.$tiedostot[$_GET['id']].".txt","a"); $_POST['kommentti']=htmlspecialchars($_POST['kommentti']); fputs($kom, $_POST['kommentti']."<br>"); fclose($kom); header("location: kommentoitavagalleria.php?kuvaid=".$_GET['id']); } else { echo "?"; //jos ei oo niin ei ole } } else { echo "M"; //tätä ei pitäisi saavuttaa koskaan jos käytetään skriptiä rehellisesti } ?>
Kiitokset etukäteen, jos joku osaisi auttaa ja löytäisi viat noista;)
edit: mitään suurempia virheitä ei ole, tai niistä ei ainakaan herjata.
$nimi=explode(".",$nimi) if ($nimi[1]=="jpg" /* "gif" "png" etc..*/) { $tiedostot[]=$nimi[0].$nimi[1]; }
tää tietysti olettaa, notta sullon siel vaa kuvatiedostoja, joissa ei oo nimessä ku yks piste.
Ite oon käyttäny seuraavaa vertailua tarkistamaan tiedostopäätettä:
<?php //sallitut tiedostopäätteet isolla kirjoitettuna $kuvatyypit = ("JPG","GIF","PNG") if(in_array(strtoupper(substr($nimi,-3)),$kuvatyypit)) { //tiedosto on kuva } else { //tiedosto ei ole kuva } ?>
Ja hieman viritellympi olisi:
<?php //sallitut tiedostopäätteet isolla kirjoitettuna $kuvatyypit = array("JPG","JPE","JPEG","GIF","PNG"); $paate = array_reverse(explode(".", $nimi)); if(in_array(strtoupper($paate[0]),$kuvatyypit)) { //tiedosto on kuva } else { //tiedosto ei ole kuva } ?>
Voidaan sallia myös nelikirjaimisia kuvia (kuten jpeg ja tiff) kuitenkaan tietoturvan kärsimättä koska $paate[0] ilmestyy aina se viimeisen pisteen jälkeinen osuus (eli kuva.jpg.exe ei tule läpi).
Aihe on jo aika vanha, joten et voi enää vastata siihen.