Абсолютный и относительный путь к файлу

Любая web-страница, картинка, видео и т. д. это в первую очередь файл, имеющий свой абсолютный или относительный путь (адрес). Сам файл в сети Интернет находится на компьютере, который называется сервер. Таким образом, следует учесть способы представления файла на сервере и в сети Интернет. В данной статье мне бы хотелось прояснить перечисленные моменты и внести ясность в затронутый вопрос. Попробуем?

Абсолютный путь (адрес)

Что такое абсолютный путь к файлу?

Абсолютный путь или адрес – это полный путь или адрес, относительно домашней папки на сервере или доменного имени в сети Интернет.

Говоря «домашняя папка» я подразумеваю начало выделенного хостинг-провайдером пространства. Например, если речь идёт о локальном сервере, на операционной системе Windows, в качестве домашней папки будет выступать сам диск, т. е. C:/. В тоже время, зачастую хостинг-провайдер выделяет пользователю лишь определенное виртуальное (условное) пространство, для которого в качестве домашней папки выступает определенная папка, зачастую называемая /home.

Говоря «доменное имя» я подразумеваю URL-адрес, который начинается с упоминания протокола, например: http://sitename.ru/. В сети Интернет, именно он является домашней папкой для каждого из представленных ресурсов.

Как узнать абсолютный путь на сервере в PHP?

Если с URL-адресом всё более-менее понятно, то вот с домашней папкой на сервере дело обстоит несколько сложнее. В конце концов, у каждого провайдера есть свои заморочки и это следует учесть.

А начну я с того, что абсолютный путь на сервере обычно определяется относительно места нахождения скрипта, в котором это происходит. Например, файл config.phpнаходится в корневой папке сайта и нам нужно узнать абсолютный путь к нему.

Уточню, говоря «корневая папка» я подразумеваю папку на сервере, выделенную для сайта. Именно она служит отправной точкой URL-адреса относительно доменного имени.

Для этого можно использовать константу __FILE__, которая содержит полный путь и имя текущего файла, в котором она вызывается. Для того же чтобы получить только полный путь и убрать имя текущего файла, можно использовать функцию dirname(), которая возвращает родительский каталог указанного пути. Например:

$abspath = dirname(__FILE__) .'/';

В PHP 5.3 и новее, можно уже использовать константу __DIR__:

$abspath = __DIR__

Таким образом очень удобно подключать в дальнейшем файл config.phpи использовать полученный в нем абсолютный путь переменной $abspathкак отправную точку. Например, предположим, что скрипт test.phpнаходится в папке: path/– а нужный файл data.txtв папке: data/. В этом случае вызов может иметь вид:

include_once('../config.php');
$fh = fopen($abspath .'/2013/12/data/data.txt', 'r');

Обратите внимание, что подключение файла config.phpя произвел с использование относительного пути, но об этом чуть позже.

Относительный путь (адрес)

Что такое относительный путь к файлу?

Относительный путь или адрес — это путь или адрес относительно места нахождения файла, в котором производится обращение к другому файлу.

Любая файловая система представляет собой строгую иерархию родительских и дочерних папок и файлов. Например: C:\folder\file.php– здесь папка folder\является дочерней для диска C:\и родительской для файла file.php.

Для наглядности давайте рассмотрим следующую иерархию:

  • C:\
  • file1.php
  • folder\
    • file.php
    • subfolder\
      • file3.php

Чтобы из файла C:\folder\file.phpобратиться к файлу C:\file2.php, нам нужно выйти из текущей папки folder\, т.е. подняться на один уровень выше. Для этого можно использовать, папку (я бы даже сказал псевдо-папку) родительского каталога, представляющую собой две точки (..). Другими словами, мы получим путь: ..\file2.php– относительно файла file.php.

Чтобы из файла C:\folder\file.phpобратиться с файлу C:\folder\subfolder\file3.php, нам нужно войти в подпапку subfolder\, т.е. опуститься на один уровень ниже. Так мы получим путь: subfolder\file3.php– относительно файла file.php.

Давайте усложним задачу и обратимся из файла C:\folder\subfolder\file3.phpк файлу C:\file2.php. Относительный путь будет иметь вид: ..\..\file2.php– мы поднялись на два уровня выше. Выполнить обратное, т.е из файла C:\file2.phpобратимся к файлу C:\folder\subfolder\file3.php. Относительный путь будет иметь вид: folder\subfolder\file3.php– мы опустимся на два уровня ниже.

Преимущества и недостатки относительного пути (адреса)

Очевидно, что относительный путь не содержит домашней папки и родительских папок. Таким образом, конечный адрес получается короче. Более того, в случае необходимости переезда с одного домена на другой не возникнет необходимости прописывать новый абсолютный адрес.

С другой стороны, в случае цитирования контента сайта, на другом ресурсе, с теми же картинками, в которых прописан относительный путь, мы получим ошибку, т.к. на стороннем ресурсе отсутствуют папки и файлы сайта. Так получится в случае просмотра страницы в кэше поисковых систем. Опять же, используя относительный путь можно легко допустить ошибку, которая выльется в проблему индексации сайта.

Подводя итог, следует отметить, что использование относительного пути или адреса желательно свести к минимуму и использовать абсолютные пути и адреса.

Заключение

В своей статье я постарался рассмотреть фундаментальный вопрос, связанный с абсолютными и относительными путями (адресами) к файлам и папкам. По сути, если вы работаете на компьютере, то уже априори имеете представление о файловой системе, но без учета некоторых нюансов, достаточно сложно сдвинуться с мертвой точки и затронуть ряд вопрос, которые неизбежно относятся к правильности адресации. На этом у меня всё. Спасибо за внимание. Удачи!

Короткая ссылка: http://goo.gl/FGJNm5