Relatieve url vanuit pad geinclude bestand

Status
Niet open voor verdere reacties.

5blabla5

Gebruiker
Lid geworden
27 apr 2009
Berichten
485
Ik heb een functie geschreven waarmee je relatieve urls kunt includen met de volgende structuur:
/dir/file1.php
/file2.php
/file3.php

Bij het uitvoeren van file1.php wordt ../file2.php geinclude. Als je in file2.php file1.php include, zal hij nog steeds ../file2.php includen, maar vanuit het pad van file1.php, en niet dat van file2.php (anders zou het gaan flippen).

PHP:
<?php

	function relativeInclude($file) {
	
		$root = str_replace($_SERVER['DOCUMENT_ROOT'], '', __DIR__) . '/';
		$file = $root . $file;
		
		if(file_exists($file)) {
		
			if(@include($file) == 'OK') {
				return TRUE;
			} else {
				return FALSE;
			}
			
		} else {
			return $file;
		}
		
	}
	
?>

Nu werkt er iets nog niet. Ik voer in: "../file2.php", waarna $file wordt gevuld met /dir/../file2.php. Dit pakt hij echter niet bij de file_exists functie, en daar gaat het dur fout. Hoe kan ik er voor zorgen dat hij /dir/../file2.php als /file2.php gaat aanzien zonder dat het bestand werkelijk hoeft te bestaan?
 
een dirty way om die puntjes weg te krijgen is ltrim($file, ".")
moet je wel uitvoeren voor $root
 
Ik denk dat ik er maar een script voor ga schrijven die automatisch navigeert...
 
wat voor een file moeten er dan geinclude worden?
En waarom gebruik je niet het absolute pad op de server.
en een pad uit je url halen is wel gevaarlijk. want hackers kunnen daarmee je hele server op.
../.../.../../../../../../ en voor je het weet zitten ze in je servermappen.
en ../ kun je ook als htmlenteties in de url in voeren en dan werkt het ook.
Heb er eens een tut over gezien op youytube
 
Het is de bedoeling dat je een script wat bestaat uit meerdere bestanden overal kunt includen, en dat het script wel flexibel blijft. Ik gebruik ook als het ware het absolute pad: /map/bestand.php vind ik toch aardig absoluut. Ik bouw uiteraard wel gelijk een beveiliging in over welke mappen buitengesloten moeten worden enzo ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan