...dit werkt allemaal prima wanneer ik naar pagina's in de root surf (Zoals contact.php of login.php). Maar, wanneer ik naar een bestand surf dat in een map staat (zoals /plugins/news/index.php) dan werkt de bovenstaande include niet meer! Dan moet het opeens include_once('../../controller/class.ApplicationStarter.php'); zijn!
Nou zou je zeggen. O, oke dan maak je er een statisch pad van /rootdir/blabla....Maar de rootdir van mijn CMS staat in een config bestand. (Die is dus variabel: kan / zijn maar ook bijvoorbeeld /mijncms/) die op dat moment nog ingeladen moet worden en dus onbekend is.
Mijn vraag is dus, hoe ga ik die require laten werken ondanks dat mijn header.php zich soms in mappen bevind en soms in de root.
Dit is denk ik het meest storende probleem dat ik ooit met PHP heb ervaren en ik hoop eindelijk een fatsoenlijke oplossing te vinden (Dus niet een statisch pad defineren in de code, die horen in config files thuis ).
dan moet je het nog wel met de hand doen, maar wel simpeler. Je zet nu in je config bestand (die je dus hiervoor moet includen) $configMappen = 2;
en dan doet ie overal netjes twee mappen op
Maar krijg deze foutmelding:
Warning: require_once(./controller/:../controller/:../../controller/class.ApplicationStarter.php) [function.require-once]: failed to open stream: Bestand of map bestaat niet in /home/sites/webhosting/codestars/codestars/dev/includes/siteHeader.php on line 19
Fatal error: require_once() [function.require]: Failed opening required './controller/:../controller/:../../controller/class.ApplicationStarter.php' (include_path='./controller/:../controller/:../../controller/') in /home/sites/webhosting/codestars/codestars/dev/includes/siteHeader.php on line 19
Je moet je include path niet ophalen in require_once, dan krijg je een string die je 4 eerder gesette include paths bevat.
Het idee achter verschillende include paths te definiëren is dat wanneer je een bestand include, hij eerst voor dat bestand gaat kijken op de locatie van je eerste include path(die je hebt opgegeven in set_include_path), dan je tweede, enz.
Dat werkt! Al lijkt het me niet de meeste nette oplossing aangezien ik op verschillende plaatsen die regels code moet toevoegen...
En het brengt een nieuw probleem met zich mee aangezien de oplossing van Woedi niet werkt voor het pad van het config bestand dat ik wil inladen met de functie SimpleXml_load_file($configFile);
Stiekem hoop ik nog op een alternatieve oplossing!
Eindelijk heb ik iets gevonden dat lijkt te werken!
De onderstaande regel code check de dir waar de siteHeader in staat. - de map includes. Dan kom je uit op de root website dir zonder dat ergens statisch in de code de hoeven plaatsen! Hoera voor mij!