Здравствуйте,
Cтала делать меню и что-то совсем запуталась, распутайте, пожалуйста!
У меня 2 вопроса.
1. Вот есть (будут) на сайте 5 разделов, для каждого своя папка: news/ , about/ , contacts/ и т.д.
Т.е. есть 5 пунктов меню.
Записала это меню в отдельный файл: menu.php . Он находится в КОРНЕВОМ каталоге.
И вот вопрос - как мне теперь к этому файлу обращаться через функцию require ? Т.е. к корневому каталогу? Если написать <? require( 'menu.php' ); ?> , то он, понятное дело, не находится.
Не понимаю принципа обращения к файлам.
2. И еще:
Вот у меня сейчас РНР файл лежит в такой папке: T:\home\localhost\k\kog\file.php
В нём есть такое обращение: style="background: url(/images/top.gif)" .
Почему же он это рисунок ищет в папке T:\home\localhost\images
, вместо того чтобы искать его в T:\home\localhost\k\images ?
Объясните пожжалуйста, или носом ткните где про это читать%)).
1. Alice_vic - 29 Мая, 2008 - 17:09:18 - перейти к сообщению
2. Furax - 29 Мая, 2008 - 22:57:45 - перейти к сообщению
Alice_vic
Существует разница между обработкой адресов браузером и PHP.
Браузер понятия не имеет про то, на каком диске и в какой директории находится корень сайта, он обращается к нему по URL (http://my.site.ru), а уже сервер, стоящий на твоём компе (или на любом другом), знает, какая директория является корнем сайта (кстати, одному сайту не обязательно соответствует только одна директория). Поэтому обращение к /images/top.gif побуждает браузер загрузить страницу http://my.site.ru/images/top.gif, а уже сервер понимает, что надо искать файл T:\denwer\home\site.ru\my\images\top.gif.
Если же обработка адресов происходит в PHP-скрипте, то здесь уже работают правила, принятые в файловой системе сервера. Ты можешь напрямую подключить файл, указав его абсолютный путь (T:\home\localhost\k\kog\menu.php), но это будет работать только на твоей машине (или там, где абсолютный путь совпадает с твоим вариантом). Поэтому удобнее использовать относительную адресацию.
Пусть в каталоге есть файл menu.php и каталог news, в котором лежат файл file.php и каталог archive, где лежит файл archive.php. Тогда из file.php сослаться на archive.php можно как "archive/archive.php" (обрати внимание: путь относительный, без указания диска и т. д.), а на menu.php - "../menu.php". ".." означает "на 1 каталог вверх". Если надо вверх на 2 каталога - пишем "../.." и так далее.
Существует разница между обработкой адресов браузером и PHP.
Браузер понятия не имеет про то, на каком диске и в какой директории находится корень сайта, он обращается к нему по URL (http://my.site.ru), а уже сервер, стоящий на твоём компе (или на любом другом), знает, какая директория является корнем сайта (кстати, одному сайту не обязательно соответствует только одна директория). Поэтому обращение к /images/top.gif побуждает браузер загрузить страницу http://my.site.ru/images/top.gif, а уже сервер понимает, что надо искать файл T:\denwer\home\site.ru\my\images\top.gif.
Если же обработка адресов происходит в PHP-скрипте, то здесь уже работают правила, принятые в файловой системе сервера. Ты можешь напрямую подключить файл, указав его абсолютный путь (T:\home\localhost\k\kog\menu.php), но это будет работать только на твоей машине (или там, где абсолютный путь совпадает с твоим вариантом). Поэтому удобнее использовать относительную адресацию.
Пусть в каталоге есть файл menu.php и каталог news, в котором лежат файл file.php и каталог archive, где лежит файл archive.php. Тогда из file.php сослаться на archive.php можно как "archive/archive.php" (обрати внимание: путь относительный, без указания диска и т. д.), а на menu.php - "../menu.php". ".." означает "на 1 каталог вверх". Если надо вверх на 2 каталога - пишем "../.." и так далее.
3. TvoyWeb - 30 Мая, 2008 - 00:39:29 - перейти к сообщению
Alice_vic
В PHP есть директива include_path в ней записаны пути где искать файлы подключаемые всевозможными инклюде.
PHP сначала ищет относительно папки откуда вызывается скрипт в котором подключаются файлы и потом ищет в в инклюде патч.
Посмотреть где PHP ищет файлы можно
Я в своих сскриптах всегда использую такой код:
Здесь на первой строке проверяем директиву разделитель путей в инклюде патч и потом добавляем через разделитель новый путь в инклюде патч.
В PHP есть директива include_path в ней записаны пути где искать файлы подключаемые всевозможными инклюде.
PHP сначала ищет относительно папки откуда вызывается скрипт в котором подключаются файлы и потом ищет в в инклюде патч.
Посмотреть где PHP ищет файлы можно
CODE:
echo ini_get("include_path");
Я в своих сскриптах всегда использую такой код:
CODE:
if (!defined("PATH_SEPARATOR")) { define("PATH_SEPARATOR", getenv("COMSPEC")? ";" : ":"); }
ini_set("include_path", ini_get("include_path").PATH_SEPARATOR.dirname(__FILE__));
ini_set("include_path", ini_get("include_path").PATH_SEPARATOR.dirname(__FILE__));
Здесь на первой строке проверяем директиву разделитель путей в инклюде патч и потом добавляем через разделитель новый путь в инклюде патч.
4. Alice_vic - 30 Мая, 2008 - 16:25:28 - перейти к сообщению
Furax Спасибо большое, очень помогло твое объяснение, вроде теперь всё сделала .
TvoyWeb Это слишком гениальный код для меня , но все-таки хочется узнать - а что значит ? в верхней строке и вот эти двоеточия ";" : ":" за ним?
TvoyWeb Это слишком гениальный код для меня , но все-таки хочется узнать - а что значит ? в верхней строке и вот эти двоеточия ";" : ":" за ним?
5. Systemnik - 31 Мая, 2008 - 06:13:00 - перейти к сообщению
Цитата:
Я в своих сскриптах всегда использую такой код:
Вот вот а мы тут недавно с cryptex'om с альфы мучались и правили твой код Маркус пусть не в тему но сделай нормально! на альфе отключен ini_set().... Я что бы установить форум мучался пол дня и правил кучу файлов..
6. Furax - 31 Мая, 2008 - 07:44:53 - перейти к сообщению
Alice_vic
Конструкция
Конструкция
CODE:
значит следующее: если a, то b, иначе c. Например:a ? b : c
CODE:
Если POST-переменная user была задана, то будет выведено имя пользователя в безопасном виде, если нет - слово "Гость".
print(isSet($_POST['user']) ? htmlSpecialChars($_POST['user']) : 'Гость');