Relatívne cesty v PHP

Ako už viete, do parametra funkcie file_get_contents sa má písať názov súboru. To však funguje len v prípade, že čítaný súbor sa nachádza v rovnakom priečinku, v ktorom sa spúšťa náš skript.

Ak sa súbor nachádza na inom mieste, tak do parametra funkcie je potrebné napísať cestu k tomuto súboru.

Pozrime sa na príklad.

Príklad

Predpokladajme, že máme nasledujúcu štruktúru súborov:

Poďme si prečítať obsah textového súboru. Na to okrem názvu súboru budeme potrebovať uviesť aj priečinok, v ktorom sa nachádza:

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

Príklad

Predpokladajme, že máme nasledujúcu štruktúru súborov:

V takom prípade pokus o prečítanie nášho súboru zadaním jeho názvu ako cesty skončí chybou:

script/index.php<?php
  echo file_get_contents('test.txt'); // vypíše chybu
?>

Prečo sa vyskytuje chyba? Dôvod je v tom, že do parametra funkcie sme napísali názov súboru. To znamená, že čítaný súbor by mal byť umiestnený v rovnakom priečinku, ako je spúšťaný skript.

Avšak, náš čítaný súbor sa nachádza o úroveň vyššie, teda v priečinku, ktorý obsahuje priečinok so skriptom.

V takom prípade musíme explicitne uviesť v ceste k súboru, že tento súbor treba hľadať o úroveň vyššie. Na to pred názov súboru treba napísať ../. Urobme to:

php<?php
  echo file_get_contents('../test.txt'); // súbor bude prečítaný
?>

Príklad

Predpokladajme, že máme nasledujúcu štruktúru súborov:

V tomto prípade pri čítaní súboru najprv vystúpime o úroveň vyššie a potom uvedieme cestu k nášmu súboru relatívne vzhľadom na túto úroveň:

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

Príklad

Predpokladajme, že máme nasledujúcu štruktúru súborov:

V tomto prípade budeme musieť vystúpiť nahor dvakrát:

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

Praktické úlohy

Задание 1

Napíšte kód, ktorý prečíta obsah textového súboru:

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

Napíšte kód, ktorý prečíta obsah textového súboru:

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

Napíšte kód, ktorý prečíta obsah textového súboru:

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

Napíšte kód, ktorý prečíta obsah textového súboru:

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