Paden... Relatief?Absoluut!
http://www.phphulp.nl/php/forum/topic/bestanden-uit-een-andere-map-includen/79722/
... toch even een paar vragen over paden.
Als je bestanden include of requiret, maakt het dan verschil of je een relatief of absoluut pad gebruikt?
Noppes zegt namelijk in dat topic: "files include je niet door opgave van relatief path maar absoluut path!"
Vandaar mijn vraag.
Tja, naar aanleiding van dit topic ... toch even een paar vragen over paden.
Als je bestanden include of requiret, maakt het dan verschil of je een relatief of absoluut pad gebruikt?
Noppes zegt namelijk in dat topic: "files include je niet door opgave van relatief path maar absoluut path!"
Vandaar mijn vraag.
Als ze maar gevonden worden lijkt mij het belangrijkst.
include '/home/var/www/mijnproject/library/config.php';
en
include 'library/config.php';
of include '../../library/config.php';
Maakt dit iets uit qua veiligheid, of qua snelheid misschien? Waarom zegt Noppes dat je absolute paden moet gebruiken. Hij zal het toch niet voor niks zeggen lijkt me.
stuur eens een pm. Dan ben je zeker dat hij het leest en dan kan hij uitleg geven. ik ben ook benieuwd.
Heb gestuurd. Mocht iemand anders ondertussen het antwoord weten dan hoor ik het graag.
Stel je hebt een /includes/main.class.php en een /includes/config.php. De config wordt vanuit de main.class.php aangeroepen, maar in elke andere source roep je alleen de main.class.php aan.
Dan kun je de root map bepalen door het volgende te doen in de main.class.php.
Code (php)
1
2
3
4
5
2
3
4
5
<?
define("__documentroot__", str_replace("/includes/main.class.php", "", __FILE__));
include(__documentroot__."/includes/config.php");
...
?>
define("__documentroot__", str_replace("/includes/main.class.php", "", __FILE__));
include(__documentroot__."/includes/config.php");
...
?>
Op deze manier hoef je nooit het pad echt te benoemen, maar kun je toch de main.class.php overal vandaan aanroepen. Als er namelijk alleen include("./config.php"); in de main.class.php zou staan, kun je hem alleen maar vanuit de /includes directory invoegen.
Er is voor zover ik weet geen snelheidswinst te behalen bij absoluut of relatief benoemen.
include '../../private/index.php';
Gewijzigd op 21/08/2011 19:14:15 door Fabian M
Een beetje off-topic, maar in je HTML zijn absolute paden sowieso veel handiger, omdat je routes/urls kan veranderen zonder alle links te hoeven aanpassen.
@Pim: ik denk dat je dan relatieve paden bedoelt.
Toevoeging op 21/08/2011 21:18:20:
Als je dynamische URLs gebruikt, staat je structuur van statische bestanden volledig los van je pagina's, dan zijn absolute paden noodzakelijk.
<base href="/je/root"> gebruiken zodat al je urls zoals pagina.html altijd naar /je/root/pagina.html wijzen. Je links zelf zijn relatief, maar dat ene base-element op de pagina maakt ze allemaal absoluut.
Niet helemaal, je kan Maar als je je app in de root hebt, is /naar/je/pad.js makkelijker.
Dus volgens jou is het makkelijker om te zeggen:
www.mijnsite.nl/images/plaatje.jpg (absoluut)
in plaats van
images/plaatje.jpg (relatief)
Als je nu je site overzet naar een ander domein dan moet je je absolute pad aanpassen, dus ik snap niet helemaal wat je bedoelt.
(zelf zou ik overigens ook absolute paden gebruiken, maar www.mijnsite.nl zou ik dan in een variabele stoppen, zodat je krijgt $url.'images/plaatje.jpg')
Gewijzigd op 21/08/2011 21:51:51 door Ozzie PHP
Zelf gebruik ik $_SERVER['DOCUMENT_ROOT']. Volgens mij heeft dat dezelfde performance. Misschien een idee om het is te testen Ozzie? (en dan doel ik niet alleen op superglobal, maar ook op constanten, relatief, absoluut, ...)
Gewijzigd op 21/08/2011 22:25:58 door Write Down
maar nu lijkt hij even van het PADje... moeewhhahahaaaa :-D
Ozzie PHP op 21/08/2011 21:51:02:
Ik denk dat Pim deze bedoelt:
/images/plaatje.jpg (is ook absoluut, maar dan vanaf de webroot)
http://p.im/pad/naar/het/bestand.js, maar ook /pad/naar/het/bestand.js. Dat is ook een absoluut pad. Ik had het over de tweede mogelijkheid.
Toevoeging op 21/08/2011 23:04:22:
Idd ja ,SanThe
Oh zo. Je kan absolute paden met en zonder host doen. Dus Toevoeging op 21/08/2011 23:04:22:
Idd ja ,SanThe
images/plaatje.jpg
en
/images/plaatje.jpg
?
http://www.eensite.com/images/plaatje.jpg en je CSS staat bijvoorbeeld op http://www.eensite.com/systeem/templates/css/basic/style.css en je verwijst naar image/plaat.jpg dit niet werken. Wanneer je echter een extra / gebruikt, zegt je dat het in de map ROOT/images staat.
Als jouw afbeelding bv te bereiken is op En als je vanuit de css verwijst naar ../../../../images/plaatje.jpg ? Dat zou ook gewoon werken toch? Of is dat niet goed?
Stel nu dat in de map systeem een index.php staat en die moet een bestand includen in de map templates, dan zou ik dus dit kunnen doen:
include 'templates/view.php';
maar ook:
include '/systeem/templates/view.php';
Wat is beter en wat raden jullie dan aan?