Давайте прочитаем текстовый файл, находящийся в папке с нашим скриптом:
<?php
echo file_get_contents('test.txt');
?>
Давайте теперь в начале пути поставим слеш:
<?php
echo file_get_contents('/test.txt');
?>
В этом случае путь станет не относительным, а абсолютным. При этом наш файл будет искаться от корня операционной системы. Конечно же, файла по такому пути не найдется, так как он расположен в папке с нашем сайтом.
Мы можем получить путь от корня операционной системы до папки с нашим сайтом:
<?php
echo $_SERVER['DOCUMENT_ROOT'];
?>
Можем добавить полученный путь к имени искомого файла - и получим правильный абсолютный путь к нашему файлу:
<?php
echo file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/test.txt');
?>
Преимущества
Использование абсолютного пути удобно, когда файл с нашим скриптом и прочитываемый файл находятся в подпапках нашего сайта.
Давайте посмотрим на примере. Пусть у нас есть следующая структура файлов:
- /script/
- index.php
- /directory/
- test.txt
Прочитаем наш файл, используя относительный путь:
<?php
echo file_get_contents('../directory/test.txt');
?>
А теперь прочитаем наш файл, используя абсолютный путь:
<?php
$root = $_SERVER['DOCUMENT_ROOT'];
echo file_get_contents($root . '/directory/test.txt');
?>
Во втором случае, даже если мы переместим файл со скриптом в другое место, путь к файлу не придется менять, ведь он задается от корня сайта.
Папка и файл скрипта
Иногда нам нужно получить не путь к корню сайта, а путь к папке со скриптом.
Это будут разные пути в том случае, если запускаемый скрипт находится не в корне сайта, а в подпапке, например, так:
- /script/
- index.php
В этом случае путь к папке со скриптом находится
в константе __DIR__
:
<?php
echo __DIR__;
?>
Можно также получить путь к самому файлу
скрипта с помощью константы __FILE__
:
<?php
echo __FILE__;
?>
Практические задачи
Напишите код, который прочитает содержимое текстового файла:
- /script1/
- /script2/
- index.php
- /script2/
- /dir/
- test.txt
Напишите код, который прочитает содержимое текстового файла:
- /script1/
- /script2/
- /script3/
- index.php
- /script3/
- /script2/
- /dir1/
- /dir2/
- /dir3/
- test.txt
- /dir3/
- /dir2/