У меня несколько вопросов: 1. Как правильно строить сайт, а именно, при создании движка, я вывожу всю информацию в единственный index.html, все остальное модули. Модули я подключаю в зависимости от поведения пользователя и посредством query_string, например, если запускают index.html и пользователь не авторизован, и пустая строка query_string подключается и выводится модуль auth.php где соответственно необходимо зарегистрироваться, если завегился и ввел данные отправляется запрос, например, index.html?auth, и проверяются данные, если правильно соответственно, загружается модуль main.php. Так вот вопрос, как правильно строить подключение модулей. я делаю проверку, например в таком виде : if(isset($_REQUEST['auth'])) { if(authorization()===true) { require_once $_SERVER['DOCUMENT_ROOT'].'/html/main.php'; } } и таким типом проверяю query_string на предмет поведения пользователя и соответственно подлючаю соответствующие модули. Продолжаю вопрос, правильно ли я делаю или есть другой более удобный и подходящий способ. 2. Вопрос 2, что лучше подлючать все модули сверху файла сразу все, или как написал я выше при определенном срабатывании if. 3. Как правильно размещать файлы в корневой папке WWW. Например, у меня в WWW находятся WWW/mods, WWW/html (это для верстальщика, тут только модули в html кодом), WWW/styles каждая папка закрыта посредством .htaccess deny from all, правильно ли я сделал, или как можно лучше все устроить? Огромное спасибо за ответы.
учиться, учиться и еще раз учиться.... помню где-то [vs] выкладывал скрипт авторизации... щас поищем вот: http://php.ru/forum/viewtopic.php?t=15658
у меня авторизация практически кк ту что ты мне указал, так же использую сессии и mysql, вопрос не в авторизации, а вообще в построении сайта, интерисуют конкретные вопросы указанные выше.
простейшая модульная структура сайта PHP: <? /* весь вывод происходит через глобальный буфер result с ним работают модули, инитер и тд. всё где есть вывод */ $result=array(); $act=!empty($_GET['act'])?$_GET['act']:false; // получаем переменную с название модуля include_once "init.php"; // инициализация системы, там заполняем рэсалт буфер всякой байдой типа блока авторизации, меню и пр. if($act){ if(file_exists($modulname="moduls/$act.php")){ // папку с модулями лучше закрыть при помощи сервера или константой закрыть сами модули include $modulname; // подключаем модуль }else{ $result['error']="Нет такого модуля"; } }else{ include "moduls/default.php"; // дефолтный модуль } print_r($result); // готовый буфер в нашем примере просто рапечатываем как массив, на деле будет главный шаблон ?>
Существует много способов и единственно правильного не существует, существует оптимальный способ для конкретной ситуации(иногда) Советую обратить внимание на фреймворки, такие как Symfony, ZF и т.д. Возможно их что-то из их подхода Вам понравится. PHP вначале транслирует в байт код Ваш сценарий, если по срабатыванию какого либо условия мы попадаем на require/include/eval он траслирует другие сценарии. Соответственно если их все подключать сверху, они будут все каждый раз, если же использовать If будет транслироваться только тот что нужен. Классы, библиотеки функций и проч. вещи, которые пользователю не нужны, ИМХО, лучше располагать за каталогом www.
PHP вначале транслирует в байт код Ваш сценарий, если по срабатыванию какого либо условия мы попадаем на require/include/eval он траслирует другие сценарии. Соответственно если их все подключать сверху, они будут все каждый раз, если же использовать If будет транслироваться только тот что нужен. Классы, библиотеки функций и проч. вещи, которые пользователю не нужны, ИМХО, лучше располагать за каталогом www.[/quote] По поводу подключения модулей, я представляю как они подключаются, просто модуль, например, состоит из функции, и если подключить этот модуль сверху, он на исполнение не запустится, а просто подключится как есть, пока не будет вызвана сама это функция. Может понадобиться запустить это вункцию несколько раз, и получается нужно подключать модуль каждый раз когда нужнозапустить функцию? А если подключаем посредством include код будет 2 раза подлючать, что много и не нужно, если посредством require_once то модуль подключится не повторно, а будет подключен тот что уже подключался. По поводу расположения папок с модулями: так же понимаю, что ее нет смысла разполагать в папке WWW, а лучше положить на уровень вверх, недоступный пользователю, но ВОПРОС, как тогда к ней обращаться? посредством, $_server['DOCUMENT_ROOT'] не получится, а каждый раз писать фактический полный адрес, не удобно при смене, например сервера, как быть?
Вы так часто меняете сервера для проекта? ИМХО ничего страшного в этом нет. Да я это понимаю. Но зачем подключать сверху, например 8 модулей, если на самом деле нужен один? Лишняя трансляция кода = снижение производительности. Если проект мало посещают это не критично, но потом может стать источником небольших неприятностей. Вообще если у Вас каждый модуль представляет собой класс/набор классов, то можно просто использовать __autoload, а в начале подключать только то что 100% будет нужно всегда, у меня например, это класс для работы с настройками, с сессиями, и "ядро".
Она так же будет валидироваться и компилироваться, как и весь сценарий, т.е. занимать место в оперативной памяти и тратить процессорное время ;-) Ну вообще это фигня конечно, но подключение по условию выглядит логичнее. Как удобнее. В простешем варианте я бы советовал создать папки service, design, первую - для скриптов, вторую - для дизайна (шаблоны).
спасибо, учту, да еще забыл спросить, есть форма <input type="text" name="form[text]">вопрос, в каком виде будет передаваться form[text] в query_string? Хочу сделать ссылку, например, <a href="?form[text]">ссылка</a> Но так не катить , какой синтаксис?