ProfiPHPProfiPHP
Категория: Полезное в PHP

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

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

Веб ресурс для всех посетителей представляет собой виртуальный веб-сервер. Адрес "http://mysite.ru/file.html" не всегда означает, что файл с именем "file.html" существует физически на сервере. Этот адрес "URI" (унифицированный идентификатор ресурсов) представляет собой виртуальный адрес с которым работает браузер.

Для разработчика веб ресурс - это программа, которая выполняется на вполне конкретном реальном компьютере с совершенно конкретным жестким диском, каталогами и файлами. И программа, работая со своими данными, подгружая другие скрипты, работает исключительно с реальными файлами на физическом диске.

Вот в этом различии и прячутся трудности и ошибки, с которыми часто сталкиваются начинающие программисты.

Необходимо четко понять две вещи:

- Отличие относительных путей от абсолютных;

- Различать корень веб-сервера, как его видит браузер, и корень файловой системы на диске.

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

В адресе "http://www.mysite.org/" последняя косая черта обозначает вполне конкретный адрес - начало сайта.

В Windows системах файловая система разбивается на диски, поэтому к абсолютном адресу нужно указывать имя диска. Абсолютного корня всей файловой системы в Windows нет, у каждого диска - свой. Например, "C\:", "E\:", поэтому, даже если путь начинается с косой черты, то это не абсолютный путь, а относительный относительно текущего диска. А абсолютный начинается с буквы.

Если в начале пути не указать корневую директорию, то этот путь будет относительным. В реальной жизни это напоминает дорогу в магазин - "два квартала направо и налево". Дойти по такому пути можно только с конкретного места.

Самый простой пример относительного пути - это просто имя файла.

Если файл находится в том же каталоге, с которым работает программа - она ​​его найдет, добавив текущий путь к имени файла.

Примеры относительных путей:

file.php (./file.php) - фал лежит в той же папке;

picture/images.jpg - файл лежит в папке "picture", которая находится в текущей директории;

../file.php - файл лежит в папке, расположенной на один уровень выше текущей;

../../file.php - файл лежит в папке, расположенной на два уровня выше текущей.

И операционная система, и браузер, встретив относительный путь, достраивают его до абсолютного.

Рассмотрим разницу корня веб-сервера, как его видит браузер, и корня файловой системы на диске.

На диске путь к файлу скрипта может быть таким - "/var/www/site/mysite/index.php". В то же время, виртуальный адрес этого скрипта при просмотре через браузер, будет "http://www.site.org/mysite/index.php".

На этом примере легко увидеть, где пересекаются значение: в этих двух адресов общая часть - "/mysite/index.php", которая и служит причиной путаницы.

Для браузера это самый полный путь, который только может быть. Он начинается от корня сайта. Для скрипта же, что выполняется на сервере - это всего лишь часть пути.

Для скрипта путь "/mysite/index.php" окажется несуществующим - в корне диска нет каталога "mysite". Для того, чтобы получить полный путь, нужно приставить слева к нему путь к папке, который считается корневым для всего веб-сервер. В нашем примере это "/var/www/site".

Этот путь задается в конфигурации веб-сервера и именно он содержится в системной переменной PHP $_SERVER['DOCUMENT_ROOT'].

В виртуальном же сервере, который видит пользователь - все наоборот, нет никакого диска.

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

Если у вас на сайте есть, допустим, два раздела:

- http://www.site.ru/contact/info.html

- http://www.site.ru/information/job.html

то, если в файле "info.html" сделать ссылку прямо на "job.html", то браузер его не найдет - он будет искать адрес "http://www.site.ru/contact/job.html", достраивая путь от текущего каталога. Поэтому необходимо писать полный путь от корня сайта - "/information/job.html".

Также нужно заметить, что все это касается не только тегов "<a>" и "<img>", но и любых других, где используются ссылки на файлы.

Ссылка на локальные адреса следует писать без указания протокола и домена - только путь от корня сайта - "/information/job.html". Ссылка же на другие сайты следует писать полностью - "http://www.site.ru/information/job.html".

Язык программирования PHP предоставляет множество средств для работы с файлами, каталогами и URL адресам.

Константа "__FILE__" содержит имя текущего исполняемого файла. Очень полезной представляется конструкция "dirname(__FILE__)", на которую можно заменить все вызовы файлов, лежащих в том же каталоге, который вызывает скрипт.

Добавить комментарий

Имя:
Текст комментария:
Покрасочная камера на сайте компании Ректус Альянс.