Relativa sökvägar i PHP
Som du redan vet ska man skriva filnamnet
i parametern till funktionen file_get_contents.
Detta fungerar dock bara
om filen som ska läsas ligger
i samma mapp som vårt skript körs från.
Om filen ligger på en annan plats, måste sökvägen till den filen anges som parameter till funktionen.
Låt oss titta på ett exempel.
Exempel
Antag att vi har följande filstruktur:
- index.php
- /directory/
- test.txt
Låt oss läsa innehållet i textfilen. För att göra detta behöver vi förutom filnamnet också ange mappen där den ligger:
<?php
echo file_get_contents('directory/test.txt');
?>
Exempel
Antag att vi har följande filstruktur:
- /script/
- index.php
- test.txt
I det här fallet kommer ett försök att läsa vår fil genom att ange dess namn som sökväg att sluta i ett fel:
<?php
echo file_get_contents('test.txt'); // kommer att ge ett fel
?>
Varför uppstår ett fel? Anledningen är att vi skrev filnamnet i funktionsparametern. Det betyder att filen som ska läsas måste placeras i samma mapp som den som körs.
Men vår fil som ska läsas finns en nivå högre upp, det vill säga i mappen som innehåller mappen med skriptet.
I så fall må vi uttryckligen ange i sökvägen
till filen att denna fil ska sökas en nivå
upp. För att göra detta ska man
skriva ../ före filnamnet. Låt oss göra det:
<?php
echo file_get_contents('../test.txt'); // filen kommer att läsas
?>
Exempel
Antag att vi har följande filstruktur:
- /script/
- index.php
- /directory/
- test.txt
I det här fallet, när vi läser filen, måste vi först gå upp en nivå, och sedan ange sökvägen till vår fil relativt den nivån:
<?php
echo file_get_contents('../directory/test.txt');
?>
Exempel
Antag att vi har följande filstruktur:
- /script/
- /test/
- index.php
- /test/
- /directory/
- test.txt
I det här fallet behöver vi gå uppåt två gånger:
<?php
echo file_get_contents('../../directory/test.txt');
?>
Praktiska uppgifter
Skriv kod som läser innehållet i en textfil:
- index.php
- /dir1/
- /dir2/
- test.txt
- /dir2/
Skriv kod som läser innehållet i en textfil:
- /script/
- index.php
- /dir1/
- /dir2/
- test.txt
- /dir2/
Skriv kod som läser innehållet i en textfil:
- /script1/
- /script2/
- index.php
- /script2/
- /dir/
- test.txt
Skriv kod som läser innehållet i en textfil:
- /script1/
- /script2/
- /script3/
- index.php
- /script3/
- /script2/
- /dir1/
- /dir2/
- /dir3/
- test.txt
- /dir3/
- /dir2/