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:

Luetaan tekstitiedoston sisältö. Tätä varten tarvitsemme tiedoston nimen lisäksi myös kansion, jossa se sijaitsee:

index.php<?php
  echo file_get_contents('directory/test.txt');
?>

Esimerkki

Oletetaan, että meillä on seuraava tiedostorakenne:

Tällöin yritys lukea tiedostomme antamalla poluksi sen nimen, päättyy virheeseen:

script/index.php<?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<?php
  echo file_get_contents('../test.txt'); // tiedosto luetaan
?>

Esimerkki

Oletetaan, että meillä on seuraava tiedostorakenne:

Tässä tapauksessa tiedoston lukemisen yhteydessä siirrymme ensin ylimmälle tasolle, ja sitten osoitamme polun tiedostoomme suhteellisesti tähän tasoon:

script/index.php<?php
  echo file_get_contents('../directory/test.txt');
?>

Esimerkki

Oletetaan, että meillä on seuraava tiedostorakenne:

Tässä tapauksessa meidän on siirryttävä ylös kaksi kertaa:

script/test/index.php<?php
  echo file_get_contents('../../directory/test.txt');
?>

Käytännön tehtävät

Задание 1

Kirjoita koodi, joka lukee tekstitiedoston sisällön:

  • index.php
  • /dir1//dir2/test.txt
Задание 2

Kirjoita koodi, joka lukee tekstitiedoston sisällön:

  • /script/index.php
  • /dir1//dir2/test.txt
Задание 3

Kirjoita koodi, joka lukee tekstitiedoston sisällön:

  • /script1//script2/index.php
  • /dir/test.txt
Задание 4

Kirjoita koodi, joka lukee tekstitiedoston sisällön:

  • /script1//script2//script3/index.php
  • /dir1//dir2//dir3/test.txt