Абсолютный и относительный путь к файлу
Любая 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