Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Точки входа" 
V
    Опции темы
doctor2k
Дата 22.3.2013, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



Здравствуйте, товарищи. Вопрос у меня немножко ламерский, но просто не приходилось доселе сталкиваться с подобной проблемой.

Подход 1: настроить .htaccess так, чтобы конкретный URL (например, http://mydomain.local/login) обрабатывался конкретным файлом (например, login.php)
Подход 2: настроить .htaccess так, чтобы он всегда указывал на index.php, а в index.php написать нечто вроде:
Код

if ($_GET['page'] == 'login') require_once('login.php');
elseif (...) и т.д.


Какой подход наиболее оптимален, какие есть плюсы и минусы (в производительности/удобстве разработки и т.д.)? Большая просьба отвечать развёрнуто, т.к. между мной и моим проектом сейчас ребром стоит этот вопрос, и без ответа на него продолжать разработку я не могу.

P.S. Сейчас используется Подход 1, но почему-то иногда закрадываются сомнения в правильности такого выбора.

Это сообщение отредактировал(а) doctor2k - 22.3.2013, 01:52
PM MAIL ICQ Skype   Вверх
Fortop
Дата 22.3.2013, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Единая точка входа упрощает контроль за приложением (инициализация, подключение БД, права доступа и т.д.)
За это ты расплачиваешься некоторой долей производительности.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Arantir
Дата 22.3.2013, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



doctor2k, ну второй подход у вас тоже не очень =)
У вас между первым и вторым, в принципе, разницы не так уж много. Добавляя некий общий скрипт в начало каждого файла, типа login.php, вы получили бы тот же эффект.

Суть единственной точки входа в том, что сайт работает как целостное приложение, а не винегрет из скриптов. Отдельные страницы формируются путем вызова соответствующих методов и классов. Например, в концепции MVC роль "конструкторов страниц" выполняют контроллеры, которые определяют нужные для показа шаблоны и некоторые служебные действия.
Простыми словами — единая точка входа используется в основном тогда, когда по другому-то организовать приложение нельзя.

Такой метод активно используют веб-фреймворки. Почитайте документацию любого MVC-фреймворка, в частности, раздел об создании bootsrtap-файла (он же index.php). Это должно помочь вам понять когда  и чем единая точка полезна.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
doctor2k
Дата 22.3.2013, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



У меня почему-то имеется убеждение, что есть решать проблему "в лоб", то с точки зрения производительности результат будет наилучшим. ООП? Да, круто. MVC? Замечательно. Наш путь - писать на процедурах винигрет, но в строгом соответствии с ТЗ - и тогда у нас всё будет круто, поскольку расширять не придётся. К счастью, убеждение остаётся всего-лишь убеждением, никак не влияющим на реальный подход к разработке, однако хотелось бы узнать, в чём конкретно моё убеждение ошибочно. Вернее, я предполагаю, что оно ошибочно.
PM MAIL ICQ Skype   Вверх
Arantir
Дата 22.3.2013, 04:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Цитата(doctor2k @  22.3.2013,  01:41 Найти цитируемый пост)
 что есть решать проблему "в лоб", то с точки зрения производительности результат будет наилучшим

Безусловно. Но многие современные методы и технологии были придуманы для того, чтобы решение некоторых задач стало возможным в принципе. То есть, без этих технологий затраты (времени и труда) свели бы на нет какую-либо целесообразность реализации вышеупомянутой задачи.

Цитата(doctor2k @  22.3.2013,  01:41 Найти цитируемый пост)
расширять не придётся

Ну это явно решает многие аспекты...


Если вcпомнить, что PHP и так задуман и создан не только как ориентированный на веб язык, но и как шаблонизатор, то PHP можно использовать "как есть" даже без ООП, паттернов и концепций вроде MVC.
Если это позволяет решить задачу в полной мере — то пожалуйста.

Всякие навороты в программировании не только для уменьшения производительности созданы =) Упрощение разработки снижает количество и вероятность ошибок. Следовательно, получаются более надежные решения задач, особенно при увеличении размера и масштабов решения (приложения, веб-сервисы, игровые сервера...).

Одна точка входа упростит вам разработку. В частности то, что выполняется для каждого запроса 
Цитата(Fortop @  22.3.2013,  01:01 Найти цитируемый пост)
инициализация, подключение БД, права доступа и т.д.




--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Gold Dragon
Дата 22.3.2013, 06:29 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(doctor2k @  22.3.2013,  02:46 Найти цитируемый пост)
Подход 2: настроить .htaccess так, чтобы он всегда указывал на index.php, а в index.php написать нечто вроде:
Зачем такой изврат... Можно и проще.. 
Создаёшь в index.php в самом начале константу типа так
Код

// Установка флага родительского файла
define('_JLINDEX', 1);


а во всех других файлах в самом начале просто проверяешь
Код

// запрет прямого доступа
defined('_JLINDEX') or die();

ну или делаешь переадресацию..

Единая точка это в первую очередь безопасность. Во-вторых,  конечно "упрощает контроль за приложением (инициализация, подключение БД, права доступа и т.д.)"


Это сообщение отредактировал(а) Gold Dragon - 22.3.2013, 06:30


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Sanchezzz
Дата 22.3.2013, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



ТС Нужно определится изначально какие параметры вам нужны через modrewrite

Года два назад уже когда я писал crealog использовал вот такой подход к URL
Который 90% удовлетворяет потребности.

Код


# http://site/ru/code/ (sample argument) / (sample argument) / title or ID
RewriteRule ^([a-zA-Z_0-9]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)$ index.php?lang=$1&code=$2&$3=$4&$5=$6 [NC,L]
RewriteRule ^([a-zA-Z_0-9]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/$ index.php?lang=$1&code=$2&$3=$4&$5=$6 [NC,L]

# http://site/ru/code/ (sample argument) / title or ID
RewriteRule ^([a-zA-Z_0-9]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)$ index.php?lang=$1&code=$2&$3=$4 [NC,L]
RewriteRule ^([a-zA-Z_0-9]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/$ index.php?lang=$1&code=$2&$3=$4 [NC,L]

# http://site/ru/code
RewriteRule ^([a-zA-Z_0-9]+)/([a-zA-Z_0-9\-]+)$ index.php?lang=$1&code=$2 [NC,L]
RewriteRule ^([a-zA-Z_0-9]+)/([a-zA-Z_0-9\-]+)/$ index.php?lang=$1&code=$2 [NC,L]


PS второй реврайт после каждого провела лишний если в первом сделать ?/ но тогда, когда это чудо юдо делалось не проканало.

Получается при заходе на страницу /ru/login 
В Index.php вы получите следующий GET Массив параметров 
$lang = Язык
$code = login 





--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
bars80080
Дата 22.3.2013, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(Sanchezzz @  22.3.2013,  08:55 Найти цитируемый пост)
Года два назад уже когда я писал crealog использовал вот такой подход к URL
Который 90% удовлетворяет потребности.

код PHP
http://site/ru/code/ (sample argument) / (sample argument) / title or ID
RewriteRule ^([a-zA-Z_0-9]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)$ index.php?lang=$1&code=$2&$3=$4&$5=$6 [NC,L]
RewriteRule ^([a-zA-Z_0-9]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/$ index.php?lang=$1&code=$2&$3=$4&$5=$6 [NC,L]
http://site/ru/code/ (sample argument) / title or ID
RewriteRule ^([a-zA-Z_0-9]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)$ index.php?lang=$1&code=$2&$3=$4 [NC,L]
RewriteRule ^([a-zA-Z_0-9]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/([a-zA-Z_0-9\-]+)/$ index.php?lang=$1&code=$2&$3=$4 [NC,L]
http://site/ru/code
RewriteRule ^([a-zA-Z_0-9]+)/([a-zA-Z_0-9\-]+)$ index.php?lang=$1&code=$2 [NC,L]
RewriteRule ^([a-zA-Z_0-9]+)/([a-zA-Z_0-9\-]+)/$ index.php?lang=$1&code=$2 [NC,L]

PS второй реврайт после каждого провела лишний если в первом сделать ?/ но тогда, когда это чудо юдо делалось не проканало.

Получается при заходе на страницу /ru/login 
В Index.php вы получите следующий GET Массив параметров 
$lang = Язык
$code = login 


никогда не понимал принципиальной необходимости дербанить урл всенепременнейше в .htaccess, если всё всё равно сваливается в index.php

Код
RewriteRule ^(.*)$ index.php [L,QSA]
и хватит. а там уже на пхп как угодно его распарсишь из $_SERVER, причём правила тогда могут быть как угодно разнообразны и даже динамичны.

Добавлено через 8 минут и 24 секунды
мне кажется, что всё же надо отталкиваться от целей. очень многие пишут:

Цитата(Arantir @  22.3.2013,  02:31 Найти цитируемый пост)
 Добавляя некий общий скрипт в начало каждого файла, типа login.php


мне же никогда это не было удобно. подключать кучу инициализирующих файлов, ломать голову с определением путей к ним (даже к одному уже заморочка). зачем? прописал в БД на урл /module/gaz/rembo/ запускать в последовательности скрипт /webout/modules/auto/sc1.php и ты знаешь, что у тебя уже необходимый набор подключений организован и существуют необходимый набор переменных с нужными значениями.
совсем не сложно при этом сделать переменный набор подключаемых опций
PM MAIL WWW   Вверх
doctor2k
Дата 22.3.2013, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



Цитата(bars80080 @  22.3.2013,  10:59 Найти цитируемый пост)
никогда не понимал принципиальной необходимости дербанить урл всенепременнейше в .htaccess, если всё всё равно сваливается в index.php

Лично для меня такой подход даёт: 1) наглядность, 2) определённость, 3) простоту редактирования. Но это мой выбор, сделанный для себя smile если кому-то нравится по-другому - пожалуйста. Мне кажется, неправильных вариантов здесь нет.

Цитата(Gold Dragon @  22.3.2013,  06:29 Найти цитируемый пост)
Создаёшь в index.php в самом начале константу типа так
код PHP
1:
2:
// Установка флага родительского файла
define('_JLINDEX', 1);


а во всех других файлах в самом начале просто проверяешь
код PHP
1:
2:
// запрет прямого доступа
defined('_JLINDEX') or die();

ну или делаешь переадресацию..

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


Цитата(Gold Dragon @  22.3.2013,  06:29 Найти цитируемый пост)
Единая точка это в первую очередь безопасность.

Верно, не ведь это не единственный способ обеспечения безопасности.
PM MAIL ICQ Skype   Вверх
Sanchezzz
Дата 22.3.2013, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Скажу в свое оправдание это было очень давно и я был юн=)

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

location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php; } }



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Fortop
Дата 22.3.2013, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(doctor2k @  22.3.2013,  02:41 Найти цитируемый пост)
Наш путь - писать на процедурах винигрет, но в строгом соответствии с ТЗ - и тогда у нас всё будет круто, поскольку расширять не придётся.

до 25-50к строк кода и когда один-два разработчика - можете так писать.

Но уже примерно на 250-300к строк кода такой подход нереентерабелен и нерентабелен.



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Arantir
Дата 22.3.2013, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Цитата(doctor2k @  22.3.2013,  11:44 Найти цитируемый пост)
Мне кажется, неправильных вариантов здесь нет.

В программировании вообще неправильных вариантов нет, но есть сайты типа http://govnokod.ru/ ... 

Цитата(bars80080 @  22.3.2013,  09:59 Найти цитируемый пост)
очень многие пишут:
Цитата(Arantir @  22.3.2013,  01:31 Найти цитируемый пост)
Добавляя некий общий скрипт в начало каждого файла, типа login.php
Должен заметить. что я все же склоняюсь к 
Цитата(Arantir @  22.3.2013,  01:31 Найти цитируемый пост)
сайт работает как целостное приложение

Я бы назвал это "хорошей организацией рабочего процесса". Даже будь приложение отдано и никогда не будет изменяться, но процесс его разработки все же будет приятнее и проще.

Разве что это сайт-визитка на 3 страницы... Но пример ТС со ссылкой на логин (вход) уже намекает на права доступа (как минимум разделение гость-пользователь), что намного удобнее, когда пользователь — структурная часть приложения (сайта), а не куча проверок перед каждой второй операцией.
И идея целостного приложения еще не означает потребность написания какого-то большого backend-фреймворка. Разве что автолодер классов там добавится, а все остальное — это объектное представление все тех же функций, которые и так будут в варианте с отдельными скриптами.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
doctor2k
Дата 23.3.2013, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



А если сам по себе сайт прост, и в чём-то даже примитивен, но при этом народ на него ходит - порядка 10к посетителей ежедневно, то как одна точка входа скажется на производительности? А на количестве серверов? А при 20к в сутки? А при 50к? smile чисто теоретически. Ну вот в качестве примера можно взять тот-же http://govnokod.ru/ - довольно простой движок, но народ ходит. Вот там как может быть сделано? Каковы показатели производительности при этом?

Это сообщение отредактировал(а) doctor2k - 23.3.2013, 01:31
PM MAIL ICQ Skype   Вверх
Arantir
Дата 23.3.2013, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



А вы думаете, что в наше-то время PHP код выполняется каждый раз для каждого запроса? Это же прошлый век...

Для особо нагруженных проектов с динамическими страницами несложно кешировать такие страницы в виде предподготовленного шаблона (от <html> до </html>) с местами вставки данных. Для отдельного запроса формирование страницы будет таким же быстрым, как выполнение phtml-файла с php, включенным между текстом.
А статические страницы — так вообще отдавание файла сразу с кеша. На крайний случай — отдавание самим серверов (с учетом некого срока годности кеша), еще до php...
В целом, есть множество способов и методов для разных случаев.


Это можно сравнить с компилированием программы. Пишется программа на удобном высокоуровневом языке. Но она относительно долго компилируется, зато в скомпилированном виде довольно быстро работает. 

Примерно так же и с PHP, только немного специфично. Исходный код приложения представляет собой удобную для разработчика архитектуру, но результаты ее выполнения кешируются (с обеспечением их актуальности) и отдаются пользователю минуя излишние (зря повторяемые) операции. При этом значимость самой структуры приложения значительно уменьшается.

Это сообщение отредактировал(а) Arantir - 23.3.2013, 01:56


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
doctor2k
Дата 23.3.2013, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



Яснопонятно)
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0635 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.