Eli aina joudun säätään noitten incluudaamisien kanssa, koska en ole ihan täysin sisäistänyt tuota systeemiä.
Eli oletetaan että on kansiarakenne:
Kansio A sisältää:
-index.php
-jere.php
-kansio B
-kansio C
Kansio B sisältää:
jake.php
kansio C sisältee:
kille.php
Nyt jos haluan esim. includata jakeen tuon killen, niin miten teen:
näinkö set_include_path("..\C");
include("kille.php");
Entäs jos haluan sisältää jakeen tuon jeren, niin teenkö näin:
set_include_path("..\");
include("jere.php");
Koska loogisesti menis noin, mutta en tiedä miksei muka sitten toimi.
Paulus M kirjoitti:
Kansio A sisältää:
- -index.php
- -jere.php
- -kansio B
- -kansio C
Kansio B sisältää:
jake.phpkansio C sisältee:
kille.phpNyt jos haluan esim. includata jakeen tuon killen, niin miten teen:
näinkö set_include_path("..\C");
include("kille.php");
Mielummin näin:
<?php include("../C/kille.php"); ?>
Paulus M kirjoitti:
Entäs jos haluan sisältää jakeen tuon jeren, niin teenkö näin:
set_include_path("..\");
include("jere.php");
Sama juttu
<?php include("../jere.php"); ?>
Älä käytä set_include_pathia noin. >_>
Yksi järkevä ratkaisu on tehdä jokin funktio, joka osaa selvittää sivuston juurihakemiston, ja käyttää tätä funktiota polun laskemiseen. Funktio itse täytyy sijoittaa jonnekin, mistä sen saa aina includella mukaan tiedostosta riippumatta, tai se pitää kirjoittaa jokaiseen tiedostoon. Tässä on oma funktioni kyseiseen tarkoitukseen:
<?php // "/abc" => "/srv/http/site/abc" function root_php($txt) { $txt = rtrim($_SERVER["DOCUMENT_ROOT"], '/').$txt; $txt = preg_replace('|/\.(?=/)|', '', $txt); $txt = preg_replace('|^\./|', '', $txt); return $txt; } # Polku annetaan nyt suhteessa www-root-hakemistoon. # Polku on "absoluuttinen" eli alkaa /-merkistä. # Nyt sama include toimii joka paikassa! include(root_php("/C/kille.php"));
Vastaavat funktiot ovat avuksi myös mm. suhteellisten polkujen tuottamisessa HTML-koodia varten ja absoluuttisten osoitteiden (http:stä asti) tekemisessä Location-otsikkoa varten.
Metabolix kirjoitti:
Kaikki polut katsotaan suhteessa ensimmäiseen ajettavaan tiedostoon.
Tarkemmin sanottuna työskentelyhakemistoon, joskin webbipalvain ajelee noita hakemistosta, jossa ensimmäiseksi kutsuttu tiedosto sijaitsee (ellei toisin määritelty?).
Metabolix kirjoitti:
Järkevin ratkaisu on minusta tehdä jokin funktio, joka osaa selvittää sivuston juurihakemiston, ja käyttää tätä funktiota polun laskemiseen.
Tai sit yksinkertaisemmin lisää rootin include_pathien iloiseen joukkoon, jolloin kaikkialla voidaan viitata huoletta suhteessa roottiin:
<?php set_include_path(get_include_path() . PATH_SEPARATOR . "rootpath"); ?>
vai onko tästä jotain haittaa? Käsittääkseni joissakin frameworkeissa include_patheihin lisätään frameworkin kirjastopolku. Toisaalta oliopohjasessa toteutuksessa autoloaderin pitäis riittää...
No ni kiitokset perusteellisista vastauksista, nyt on jo paljon varmempi olo noiden polkujen kanssa!
Aihe on jo aika vanha, joten et voi enää vastata siihen.