Абсолютные пути в PHP

Давайте прочитаем текстовый файл, находящийся в папке с нашим скриптом:

<?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
  • /dir/
    • test.txt

Напишите код, который прочитает содержимое текстового файла:

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