Relatieve paden in PHP
Zoals je al weet, moet je in de parameter van de functie file_get_contents
de bestandsnaam schrijven. Dit werkt echter
alleen als het gelezen bestand zich in
dezelfde map bevindt als waar ons script wordt uitgevoerd.
Als het bestand zich ergens anders bevindt, dan moet je in de parameter van de functie het pad naar dat bestand schrijven.
Laten we een voorbeeld bekijken.
Voorbeeld
Stel we hebben de volgende bestandsstructuur:
- index.php
- /directory/
- test.txt
Laten we de inhoud van het tekstbestand lezen. Hiervoor hebben we, naast de bestandsnaam, ook de map nodig waarin het zich bevindt:
<?php
echo file_get_contents('directory/test.txt');
?>
Voorbeeld
Stel we hebben de volgende bestandsstructuur:
- /script/
- index.php
- test.txt
In dit geval zal een poging om ons bestand te lezen, door alleen de naam als pad op te geven, eindigen in een fout:
<?php
echo file_get_contents('test.txt'); // geeft een foutmelding
?>
Waarom treedt er een fout op? Het zit zo: we hebben de bestandsnaam in de functieparameter geschreven. Dit betekent dat het te lezen bestand zich moet bevinden in dezelfde map als het uitgevoerde script.
Ons te lezen bestand bevindt zich echter een niveau hoger, dus in de map die de map met het script bevat.
In dat geval moeten we expliciet in het pad
naar het bestand aangeven dat dit bestand een niveau
hoger gezocht moet worden. Hiervoor moet voor de bestandsnaam
../ geschreven worden. Laten we dat doen:
<?php
echo file_get_contents('../test.txt'); // het bestand zal worden gelezen
?>
Voorbeeld
Stel we hebben de volgende bestandsstructuur:
- /script/
- index.php
- /directory/
- test.txt
In dit geval gaan we bij het lezen van het bestand eerst een niveau omhoog, en geven dan het pad naar ons bestand relatief ten opzichte van dat niveau aan:
<?php
echo file_get_contents('../directory/test.txt');
?>
Voorbeeld
Stel we hebben de volgende bestandsstructuur:
- /script/
- /test/
- index.php
- /test/
- /directory/
- test.txt
In dit geval moeten we twee keer een niveau omhoog:
<?php
echo file_get_contents('../../directory/test.txt');
?>
Praktische opdrachten
Schrijf code die de inhoud van een tekstbestand leest:
- index.php
- /dir1/
- /dir2/
- test.txt
- /dir2/
Schrijf code die de inhoud van een tekstbestand leest:
- /script/
- index.php
- /dir1/
- /dir2/
- test.txt
- /dir2/
Schrijf code die de inhoud van een tekstbestand leest:
- /script1/
- /script2/
- index.php
- /script2/
- /dir/
- test.txt
Schrijf code die de inhoud van een tekstbestand leest:
- /script1/
- /script2/
- /script3/
- index.php
- /script3/
- /script2/
- /dir1/
- /dir2/
- /dir3/
- test.txt
- /dir3/
- /dir2/