Paden... Relatief?Absoluut!
Tja, naar aanleiding van dit topic 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.
... 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.
Dat spreekt voor zich. Maar wat ik wil weten, is of er verschil is tussen:
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.
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.
Als je de includes vanuit elke submap moet kunnen aanroepen, dan zijn absolute paden handig.
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.
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.
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.
Oké, maar als ik je goed begrijp mag het dus beiden. Het één is dus niet sneller of veiliger dan het andere? Als ik vanuit mijn publieke www map in de index.php een bestand uit het privé deel van de server wil includen dan is het handig om gewoon dit te doen namelijk.
include '../../private/index.php';
include '../../private/index.php';
Door een relatief/absoluut path te gebruiken maak je iets niet veiliger.
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.
? Nee, dat bedoel ik niet
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.
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.
Niet helemaal, je kan <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.
Ohja, dat is waar ja.
Maar als je je app in de root hebt, is /naar/je/pad.js makkelijker.
Maar als je je app in de root hebt, is /naar/je/pad.js makkelijker.
Pim, ik snap nog steeds niet wat je bedoelt hoor.
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')
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
Ik ben er vrij zeker van dat Pim zich even mist met relatief en absoluut. Want idd, absoluut zou voor vele applicaties een enorm werkje zijn...
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, ...)
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
Mja, maar ik snap het niet... meestal heeft Pim het wel bij het rechte eind...
maar nu lijkt hij even van het PADje... moeewhhahahaaaa :-D
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)
Oh zo. Je kan absolute paden met en zonder host doen. Dus 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
Toevoeging op 21/08/2011 23:04:22:
Idd ja ,SanThe
Huh... maar wat is dan daadwerkelijk het verschil tussen
images/plaatje.jpg
en
/images/plaatje.jpg
?
images/plaatje.jpg
en
/images/plaatje.jpg
?
Als jouw afbeelding bv te bereiken is op 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.
Ah ja, oké.
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?
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?




