Tämä voi olla kyllä vaikea selittää lyhyesti, mutta koetan silti.
Olen värkännyt pidemmän aikaa uutta versiota flat-file -pohjaisesta sisällönhallintasysteemistäni ja nyt iski ongelma includen kanssa. Mulla on hakemistorakenteessa juuritasolla index.php ja muut julkisivupuolelle kuuluvat filut, alikansiossa ylläpitopuoli ja toisessa alikansiossa funktioita ja luokat, joita käytän sekä ylläpitopuolella että julkisivupuolella. Juuritasolla on myös eräänlainen konfiguraatiotiedosto setup.php, jossa on määritelty kaikki systeemin vakiot mm. kaikkien flat-filejen nimet ja pathit sekä muuta useassa paikassa tarvittavaa informaatiota.
Tein ensin tuon ylläpitopuolen kondikseen, että saan tietoa tallennettua, ja se toimii nyt ok. Ylläpitopuolella kutsutaan noita samoja luokkia ja tiedonhakufunkkareita mitä index-puolellakin ja tässä tulee nyt se ongelma.
Funkkareissa ja luokissa nimittäin includetaan tuo päätasolla oleva konfiguraatiotiedosto niin, että se toimii tuolta ylläpito-alikansiosta ajettuna:
include("../setup.php"); <- noin siis.
Kun luokkia ja funktioita käytetään index-puolelta, pitäisi konfiguraatiotiedosto kutsua niissä siltä tasolta, eli ilman ../ -merkkejä. Nyt esimerkiksi index-php:ssä kutsumani getNewsEntries-funktio antaa virheen kun ei löydä tuota setuppitiedostoa.
Miten kummassa tämän voisi toteuttaa? Ei viitsisi enää hakemistorakennettakaan pistää kokonaan uusiksi.
Käytössä Apache, PHP 5.1.2 ja jonkinverran ohjelmointikokemusta. :)
Yksi tapa on kirjoittaa näin:
include("setup.php");
Nyt kahteen alihakemistoon tarvitaan enää setup.php, jossa lukee:
include("../setup.php");
Oikea setup.php on päähakemistossa, ja sama include toimii kaikkialla.
Antti Laaksonen kirjoitti:
Yksi tapa on kirjoittaa näin:
include("setup.php");
Nyt kahteen alihakemistoon tarvitaan enää setup.php, jossa lukee:
include("../setup.php");
Oikea setup.php on päähakemistossa, ja sama include toimii kaikkialla.
Wau, kuulostaa kyllä liian yksinkertaiselta toimiakseen, mutta täytyy ehdottomasti kokeilla. Kiitoksia. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.