Mikä olisi paras ja turvallisin nettisivujen raknenne php:lla. Meinaan siis, että kannattaako tehdä tehdä vaikka index.php joka includen avulla antaa oikean sivun getin avulla. Oikeat sivut olisivat vaikka alihakemistossa /pages ja kansio on htaccess avulla estetty. Ongelmaksi tulee ainakin minulle headereitten kanssa. Eli miten kannattaa toteuttaa nettisivun rakenne. Haluan esimerkiksi valikon olevan erillisessä tiedostossa, jotta ei tarvitse muokatessa muuttaa kaikkia sivuja.
Itselläni on vastaavanlainen toteutus, joka kuitenkin toimii "itsestään", eli kun lisään tiedoston content-kansioon (sinun pages) niin se on heti käytettävissä.
<?php if($_GET['id'] && file_exists("content/".$_GET['id'])){ include("content/".$_GET['id']; }
Tuontapainen sydeemi on luultavasti melko hyvä ratkaisu.
Kannattaa huomata tuossa oleva ikävä tietoturva-aukko: mitä jos $_GET['id'] (eli se, minkä käyttäjä voi kirjoittaa selaimen osoiteriville), on "../salainenkansio/salasanat.txt"?
Ei tuollaisesta index.php-rakenteesta ole paljonkaan etua – ainakaan tuollaisella karkealla include-kikalla toteutettuna; isot frameworkit ovat asia erikseen.
Helpommin ylläpidettävä rakenne kohtuullisen kokoiselle sivustolle on sellainen, että jokainen sivu on kokonaisuutena omassa tiedostossaan ja yhteiset osat on toteutettu funktioina tai luokkina, jotka voi helposti liittää includella:
<?php // Liitetään yhteiset osat: // - tietokanta-asiat ym. // - omat apufunktiot // - funktiot ylaosa ja alaosa sivun vakio-osien tulostukseen require_once("require.php"); // Haetaan tällä sivulla näytettävät tiedot, // suoritetaan kaikki tarvittavat laskut. $data = "..."; // Tulostetaan sivun yläosa, sisältö ja alaosa. ylaosa("Otsikko"); echo "<p>Sisältöä, sisältöä, sisältöä</p>"; foreach ($data as $rivi) { echo "<p>{$rivi}</p>"; } alaosa();
Tässä tavassa on parikin etua.
Esimerkkini oli vain esimerkki, itselläni on periaatteessa sama systeemi mutta hiottuna + juurikin mainitsemasi aukko paikattuna.
Jos lontoon murre taipuu hyviä vinkkejä voi etsiä osoitteesta Php Freaks - PHP Security. Kohta 5 saattaisi kiinnostaa sinua.
Olen useampia eri ohjelmistoja ulkoisesti samaan muottiin yhdistellessä huomannut Metabolixin ehdottaman kaltaisen ratkaisun erittäin hyväksi. Eroavaisuus minulla kuitenkin on: olen eritellyt sivun tulostuksen eri vaiheet tarkemmin useammaksi omaksi funktiokutsukseen. Tämä mahdollistaa esimerkiksi ohjelmiston omien CSS- ja JavaScript-tiedostojen lisäämisen näiden omasta templaattijärjestelmästä käsin oikeaan kohtaan (parastahan sivun latauksen kannalta on, että CSS-tiedostot tulevat ennen JavaScript-tiedostoja). Etuhan koko hommasta on juuri se, että ulkoasun muuttaminen tapahtuu yhdestä paikasta kerrallaan koko sivustolle, mikä helpottaa valtavasti ylläpidettävyyttä.
Mikäli ulkoasun tulostusta ei kuitenkaan ole tarkoitus käyttää minkään valmiin ohjelmiston kanssa, niin sitten asiat voi pitää yksinkertaisempana ja pari funktiokutsua Metabolixin ehdottamaan tapaan riittää vallan mainiosti.
Muutoin mielestäni keskitetty index.php on aika tarpeeton. Ainakin osoitteen siisteyden kannalta se ei tarjoa mitään merkittäviä etuja. Paljon paremman tuloksen saa .htaccessin mod_rewritellä, jonka voimin voi "piilottaa" todelliset tiedostonimet kokonaan pois ja osoitteesta saa halutessaan hyvin siistin näköisen, esim. wiki.kontu.info/Sormusruno
tai keskustelu.kontu.info/Silmarillion
– osoitteita, jotka voi ihan oikeasti muistaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.