Suhteelliset polut PHP:ssä
Kuten jo tiedät, funktion file_get_contents
parametriin tulee kirjoittaa tiedoston nimi. Tämä kuitenkin toimii
vain, jos luettava tiedosto sijaitsee
samassa kansiossa, jossa skriptimme suoritetaan.
Jos tiedosto sijaitsee muualla, parametriin tulee kirjoittaa polku kyseiseen tiedostoon.
Katsotaan esimerkkiä.
Esimerkki
Oletetaan, että meillä on seuraava tiedostorakenne:
- index.php
- /directory/
- test.txt
Luetaan tekstitiedoston sisältö. Tätä varten tarvitsemme tiedoston nimen lisäksi myös kansion, jossa se sijaitsee:
<?php
echo file_get_contents('directory/test.txt');
?>
Esimerkki
Oletetaan, että meillä on seuraava tiedostorakenne:
- /script/
- index.php
- test.txt
Tällöin yritys lukea tiedostomme antamalla poluksi sen nimen, päättyy virheeseen:
<?php
echo file_get_contents('test.txt'); // aiheuttaa virheen
?>
Miksi virhe tapahtuu? Asia on siinä, että kirjoitimme funktion parametriin tiedoston nimen. Tämä tarkoittaa, että luettavan tiedoston tulee sijaita samassa kansiossa kuin suoritettava skripti.
Kuitenkin, luettava tiedostomme on ylimmällä tasolla, eli siinä kansiossa, joka sisältää skriptikansion.
Tällöin meidän on polussa eksplisiittisesti
osoitettava, että tiedostoa on etsittävä ylimmälle tasolle.
Tätä varten tiedoston nimen edessä tulee
kirjoittaa ../. Tehdään näin:
<?php
echo file_get_contents('../test.txt'); // tiedosto luetaan
?>
Esimerkki
Oletetaan, että meillä on seuraava tiedostorakenne:
- /script/
- index.php
- /directory/
- test.txt
Tässä tapauksessa tiedoston lukemisen yhteydessä siirrymme ensin ylimmälle tasolle, ja sitten osoitamme polun tiedostoomme suhteellisesti tähän tasoon:
<?php
echo file_get_contents('../directory/test.txt');
?>
Esimerkki
Oletetaan, että meillä on seuraava tiedostorakenne:
- /script/
- /test/
- index.php
- /test/
- /directory/
- test.txt
Tässä tapauksessa meidän on siirryttävä ylös kaksi kertaa:
<?php
echo file_get_contents('../../directory/test.txt');
?>
Käytännön tehtävät
Kirjoita koodi, joka lukee tekstitiedoston sisällön:
- index.php
- /dir1/
- /dir2/
- test.txt
- /dir2/
Kirjoita koodi, joka lukee tekstitiedoston sisällön:
- /script/
- index.php
- /dir1/
- /dir2/
- test.txt
- /dir2/
Kirjoita koodi, joka lukee tekstitiedoston sisällön:
- /script1/
- /script2/
- index.php
- /script2/
- /dir/
- test.txt
Kirjoita koodi, joka lukee tekstitiedoston sisällön:
- /script1/
- /script2/
- /script3/
- index.php
- /script3/
- /script2/
- /dir1/
- /dir2/
- /dir3/
- test.txt
- /dir3/
- /dir2/