Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Корнезависимые ссылки
 
 автор: alek_chita   (28.02.2007 в 14:33)   письмо автору
 
 

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

<a href=/dir/dir/dir/index.php>dir</a>


Попробовал у себя не пашет.
Пользуюсь пока так:

<?php
   $root 
$_SERVER['DOCUMENT_ROOT'];
   
$host $_SERVER['HTTP_HOST'];
   echo 
"<a href=$host/dir/dir/dir/index.php>Dir</a>";
   echo 
"<img src=$root/dir/dir/dir/dot.gif>";
?>


Думаю, это малоэффективно.
Как сделать лучше?

   
 
 автор: dert   (28.02.2007 в 14:44)   письмо автору
 
   для: alek_chita   (28.02.2007 в 14:33)
 

А если так


echo "<a href='./dir/dir/dir/index.php'>Dir</a>"; 
   echo "<img src='./dir/dir/dir/dot.gif'>"; 

   
 
 автор: alek_chita   (28.02.2007 в 14:53)   письмо автору
 
   для: dert   (28.02.2007 в 14:44)
 

Мне нужно чтоб точкой с которой идет отсчет была document root.
ваш вариант пробовал не вышло. Поднимается на каталог выше.

   
 
 автор: dert   (28.02.2007 в 14:55)   письмо автору
 
   для: alek_chita   (28.02.2007 в 14:53)
 


echo "<a href='dir/dir/dir/index.php'>Dir</a>";  
   echo "<img src='dir/dir/dir/dot.gif'>";  

   
 
 автор: alek_chita   (28.02.2007 в 15:24)   письмо автору
 
   для: dert   (28.02.2007 в 14:55)
 

Попробовал свой первый вариант все заработало. Это я сам намудрил. Простите, что занял ваше время.
Правельный ответ:

<img src='/dir/dir/dir/dot.gif'>

Но опять же в следующем коде происходит ошибка.


<?php
require ("/dir/dir/inc.inc");
?>


no such directory

   
 
 автор: Ralph   (28.02.2007 в 20:36)   письмо автору
 
   для: alek_chita   (28.02.2007 в 15:24)
 

Честно говоря,не пойму,зачем нужен DOCUMENT_ROOT.К примеру,мне нужен скрипт www.xxx.in.ua/superadmin/admin/hello.php.При вызовах include,fopen,mkdir,тогда да,я всегда пишу $_SERVER['DOCUMENT_ROOT'].'/superadmin/admin/hello.php (получается вроде /home/users/блаблабла/www.xxx.in.ua/superadmin/admin/hello.php).а ссылки и прочие адреса,передаваемые из браузерa (Сейчас придут умные люди и начнут ругаться) я всегда адресую от корня сайта для браузера -'/superadmin/admin/hello.php'

   
 
 автор: Ralph   (28.02.2007 в 20:43)   письмо автору
 
   для: Ralph   (28.02.2007 в 20:36)
 

Блин,намудрил...Короче,если адрес мне нужен для php-функций,пишу $_SERVER['DOCUMENT_ROOT'].'/путь от имени сервера',если для html-кода-просто '/путь от имени сервера'

   
 
 автор: Trianon   (01.03.2007 в 09:53)   письмо автору
 
   для: Ralph   (28.02.2007 в 20:43)
 

Путь от имени сервера начинается с двух косых. А у Вас - путь от корня.
Между прочим, в некоторых случаях это действительно важно. Например, в header("Location: ...");

   
 
 автор: Ralph   (01.03.2007 в 10:29)   письмо автору
 
   для: Trianon   (01.03.2007 в 09:53)
 

Странно,сколько уже так использую,причем в основном в header'ах-и ни одного сбоя не было.Честно говоря,кроме как при указании протокола,я нигде не видел два слэша подряд

   
 
 автор: Trianon   (01.03.2007 в 10:40)   письмо автору
 
   для: Ralph   (01.03.2007 в 10:29)
 

протокол (точнее - схема доступа) указывается двоеточием.
На примере этого форума.
index.php - файл в текущем каталоге
/forum/index.php - тот же файл от корня текущего сайта
//www.softtime.ru/forum/index.php - тот же файл c явным указанием имени сервера.
http://www.softtime.ru/forum/index.php - тот же файл, полный URI
Всё это корректные ссылки на один и тот же файл.
Редиректы по абсолютной и относительной ссылке отличаются тем, что во втором случае браузеру не передается информация о том, что URL поменялся.

   
 
 автор: alek_chita   (01.03.2007 в 13:52)   письмо автору
 
   для: Ralph   (28.02.2007 в 20:43)
 

Я также пользуюсь $_SERVER['DOCUMENT_ROOT'], но помоему это называется несоблюдением стилевых правил оформления кода. Хотя и не уверен на сто процентов. Вот это и хочу выяснить у профессионалов. Использование $_SERVER['DOCUMENT_ROOT'] и $_SERVER['HTTP_HOST'] в ссылках на файлы и картинки является ошибкой или нет?

   
 
 автор: Trianon   (01.03.2007 в 14:12)   письмо автору
 
   для: alek_chita   (01.03.2007 в 13:52)
 

пардон, а в чем здесь нарушение стиля оформления?

   
 
 автор: alek_chita   (01.03.2007 в 14:32)   письмо автору
 
   для: Trianon   (01.03.2007 в 14:12)
 

Хотя бы потому что в хтмл много вставок

<?php echo $_SERVER['DOCUMENT_ROOT';]?>



И т.п. Ведь echo работает медленнее, чем простой хтмл. Я не могу оценить на сколько, поэтому и спрашиваю. Вполне возможно что проблема надумана мною. Если так то прошу прощения. Все равно напишите комментарий пожалуйста.

   
 
 автор: Trianon   (01.03.2007 в 14:58)   письмо автору
 
   для: alek_chita   (01.03.2007 в 14:32)
 

Писать ссылки на $_SERVER['DOCUMENT_ROOT';] в голом html вредно. Они имеют смысл лишь в php. В голом html ссылки на собственный сайт должны быть относительными. И это действительно нарушение стиля.

   
 
 автор: alek_chita   (01.03.2007 в 17:10)   письмо автору
 
   для: Trianon   (01.03.2007 в 14:58)
 

Представте ситуацию:
1. в корне сайта есть директории
dir_1
dir_2
dir_3
....
dir_n


В корне несколько файлов хтмл+пхп. В папке dir_m лежат, кроме всего прочего, два файла top.php и foot.php. В них должны быть ссылки (картинки страницы) находящиеся в папках dir и корне сайта. Foot и top прикрепляются к некоторым файлам в папках dir и корне сайта инклудом. Понятно что использовать в этом случае относительные ссылки не приемлемо. нужны именно корнезависимые. Как их правильно писать? Не от корня диска, а от корня сайта. Как простой хтмл может определить корень сайта который может быть в любой (теоретически) поддиректории диска?

   
 
 автор: Trianon   (01.03.2007 в 17:57)   письмо автору
 
   для: alek_chita   (01.03.2007 в 17:10)
 

картинкам нечего делать в каталоге со скриптами.
В некоторых случаях им даже нечего делать на одном сервере с ними.
Примером может быть img.mail.ru

Я говорил о голом html. В нем, ясен пень, инклудов быть вообще не может. Это же не php.

   
 
 автор: alek_chita   (01.03.2007 в 18:48)   письмо автору
 
   для: Trianon   (01.03.2007 в 17:57)
 

Не сомневайтесь у меня они именно в отдельных папках.
Давайте я попытаюсь перефразировать вопрос:


<?php 
   
include("путь-от корня-сайта/file.php");
  
?>
<a href="путь-от корня-сайта/file.php">Ссылка</a>


На что нужно заменить путь-от корня-сайта/?
Конечно же если это возможно.

   
 
 автор: Ralph   (01.03.2007 в 22:11)   письмо автору
 
   для: alek_chita   (01.03.2007 в 18:48)
 

Разве то,что я предлагал,у Вас не работает ?

Для файла http://www.mysite.ua/dir/file.php

в html-тэгах и для функции header('Location...')-использовать /dir/file.php

в php-функциях - использовать $_SERVER['DOCUMENT_ROOT']./dir/file.php

По крайней мере,я так всегда пишу,и никаких проблем у меня не возникает...

   
 
 автор: alek_chita   (02.03.2007 в 12:37)   письмо автору
 
   для: Ralph   (01.03.2007 в 22:11)
 

В html вроде разобрался.
В ПХП как вы указываете работает, я сам так и делал, но все равно сомневаюсь правильно ли это.
P.S Нашел как решается эта проблема. Нужно в нутри контейнера <head> поместить тег <base htef='URL корня сайта'>. теперь все ссылки в документе будут отсчитываться от корня сайта.

Источник PHP5 на примерах стр. 453

   
 
 автор: Ralph   (01.03.2007 в 20:42)   письмо автору
 
   для: alek_chita   (01.03.2007 в 14:32)
 

Насколько меня научили правильно,то лучше написать скрипт в виде одной конструкции <?....?>,а весь html-код вписывать внутри нее в операторах echo,так как постоянный <? ?> вход-выход в/из режима php-интерпретатора как раз и забирает больше времени и ресурсов

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования