ROBOWEB : Документация : Относительный против Абсолютного URL : html, perl, cgi, php, css, 3dmax - 3D Studio русская документация с примерами программ, RTFM и описание протоколов, описание dreamweaver, все для вебдизайнера
Разработка сайтов, web дизайн - Центр Русского Дизайна HOD.RU
FLASH
3D Studio MAX
DreamWeawer FAQ
Изучение HTML
META тэги
CSS
Руководство по стилям
Спецификация WML (WAP)
Язык DHTML
Спецификация XML
Руководство по Java
Документация по JavaScript
Язык HOD Text Processor
Интерфейс CGI
Документация по Perl 5
Perl FAQ
Документация по PHP
PHP/FI 2.0
Документация по SQL
Базы данных
Доступ к БД

Рейтинг@Mail.ru Rambler's Top100

Веб дизайнеру
Каталог сайтов Axes.ru


Относительный против Абсолютного URL - или, почему не отображаются мои изображения?

Общая проблема для всех программ CGI состоит в том, что программа HTTPD изменяет текущий каталог на тот, в котором находится загружаемый документ. В случае программы CGI, текущий каталог установлен на каталог, где находится программа CGI. Обычно это не проблема, за исключением тех случаев, когда это приводит к относительному URL.

Относительный URL это тот, который полагает что текущий каталог, является также и каталогом, в котором размещен HTML файл . Так, например, если у меня есть URL:

http://my.machine/~rasmus/file.html

Фактический HTML файл мог бы быть:

~rasmus/public_html/file.html

Если внутри файла file.html у меня есть тэг:

<IMG SRC="pic.gif">

В случае если file.html загружен обычным образом то gif файл, как и ожидается, будет в ~rasmus/public_html/pic.gif. Однако, если он загружен через программу CGI с URL подобно:

http://my.machine/cgi-bin/php.cgi/~rasmus/file.html

то HTTPD устанавливает текущий каталог на /cgi-bin (или на тот, на который указывает директива ScriptAlias) и впоследствии, когда страница загружена, pic.gif файл будет ожидаеться, в каталоге: /cgi-bin/pic.gif, что обычно является не желательным эффектом.

Быстрый способ решения этой проблемы состоит в том, чтобы использовать абсолютный URL. Если в вышеупомянутом примере, тэг изображения был:

<IMG SRC="/~rasmus/pic.gif">

то не было бы никакой проблемы. Но дело в том что использование абсолютного URL не всегда желательно, так как это делает страницы менее переносимыми. Очевидный вопрос, который Вы можете сейчас задать: " Почему бы PHP просто не изменяет текущий каталог на правильный? ". Ответ - PHP фактически изменяет текущий каталог на каталог, в котором расположен отображаемый HTML файл. Любые пути файлов, используемые внутри скрипта PHP могут быть относительны. Проблема состоит в том, что тэги, находящиеся вне области действия PHP типа <img> и <href> не будут обрабатываться PHP. Когда они анализируются, PHP уже не активен, и текущий рабочий каталог установлен на каталог, определенный HTTPD.

Решение - состоит в компромиссе. PHP обеспечивает переменную, называемую PATH_DIR. Она всегда содержит часть каталога из имени текущего HTML файла. Если эта переменная PATH_DIR используется в <img> и <href> тэгах, то может быть достигнут эффект относительного URL , хотя для сервера при анализе они будут выглядеть как абсолютный URL. Для нашего вышеприведенного примера , единственое изменение, которое нужно сделать это изменить тэг img на:

<IMG SRC= "<? ECHO $PATH_DIR>/pic.gif">

Используя вышеприведенную запись, Вы можете перемещать файл, содержащий этот тэг куда угодно, и тэг всегда будет ссылаться на файл pic.gif в том же самом каталоге что и исходный HTML файл.

Другой способ решения состоит в том, чтобы использовать традиционный <BASE HREF= ... > тэг в HTML файле.

[Назад] [Содержание] [Вперед]