ФорумПрограммированиеPHP для идиотов → Правильная логика (структура) сайта

Правильная логика (структура) сайта

  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 28 февраля 2009 г. 8:15

    Привет. Есть такой вопрос: как правильно организовать структуру сайта? Например, я придерживаюсь мнения, что все должно быть в одной файле - index.php, а добавляюю переменные мы изменяем содержимое, например -
    index.php?mode=2 & submode=2 и так далее

    Вся структура сайта у меня имеет следующий вид:

    <?
     switch($_GET[mode])
     {
          // главная страница
      case 0:
       welcome_func();
       break;
       // новости
       case 1:
         read_news_func();
         break;
       // регистрация
       case 3:
         registration_func();
         break;
     }

    // и так далее
    ?>


    Правильно я все делаю? Или есть варианты получше?
    Можно еще сделать переменную mode строковой, тоесть будет чтото такое:

    <?
     switch($_GET[mode])
     {
          // главная страница
      case "main":
       welcome_func();
       break;
       // новости
       case "news":
         read_news_func();
         break;
       // регистрация
       case "registration":
         registration_func();
         break;
     }

    // и так далее
    ?>
  • }/{EHR

    Сообщения: 734 Репутация: N Группа: Адекваты

    Spritz 28 февраля 2009 г. 8:27, спустя 11 минут 14 секунд

    Если проект большой, то будет долго страница формироваться (наверное xD)
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 28 февраля 2009 г. 8:49, спустя 22 минуты 49 секунд

    Хорошо, а как делают чтобы быстро все работало?
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 28 февраля 2009 г. 9:40, спустя 50 минут 9 секунд

    делай как хочешь, можно так:
    $do = фильтруем($_GET['do']); // фильтруй полюбому!)

    if (is_readable('modules/' . $do . '.php'))
    {
       include_once 'modules/' . $do . '.php';
    }
    else
    {
       die('404');
    }
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 28 февраля 2009 г. 10:09, спустя 29 минут 30 секунд

    А можно привести простейший пример функции "фильтруем"? Непойму что она может фильтровать.
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 28 февраля 2009 г. 10:13, спустя 3 минуты 32 секунды

    убивать слеши и ".." чтоб небыло доступа к любым php файлам
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 28 февраля 2009 г. 10:42, спустя 29 минут 6 секунд

    что значит, чтобы небыло доступа к любым php файлам?
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 28 февраля 2009 г. 10:46, спустя 4 минуты 30 секунд

    например есть файл /modules/super_modul.php
    и например есть файл в корне /test.php
    если в $_GET['do'] будет ../test то будет выполнятся код
    'modules/../test.php' и запустицо скрипт test.php
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 28 февраля 2009 г. 10:51, спустя 5 минут 9 секунд


    что значит, чтобы небыло доступа к любым php файлам?


    Я могу загрузить к тебе на сервер файл, и потом через yoursite.com?module=../myfile.php - выполнить его или вообще могу указать свой файл.
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 28 февраля 2009 г. 11:04, спустя 13 минут 4 секунды

    как же тогда обрезать все php файлы? есть специальная функция?
    и еще не пойму как же кто-то может загрузить что-то мне на сервер, если пароли у меня?
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 28 февраля 2009 г. 11:18, спустя 13 минут 58 секунд

    ну там вдруг будет возможность загрузки изображений и тп. просто удаляй из $_GET['do'] все ненужные символы. чтото типа
    preg_replace('/[^a-z0-9\\/\\\\_.-]|\\.+/i', '', $_GET['do']);
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 28 февраля 2009 г. 11:48, спустя 30 минут 2 секунды

    аа, ясно
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 28 февраля 2009 г. 21:01, спустя 9 часов 12 минут 22 секунды

    фильтровать можно так: определяешь список модулей, которые могут легально вызываться:

    <?php

    $modules = array('main', 'news', 'regisration');
    $do = (isset($_GET['do'])) ? $_GET['do']) : 'main';

    if (in_array($do, $modules))
    require 'modules/' . $do . '.php';
    else
    exit('Убей себя, хацкер!');

    здесь строка с isset задает "модуль по-умолчанию".
    ".." и прочие "/" пофигу, т.к. мы явно указали все допустимые варианты.

    вариант, если do - число:

    <?php

    $modules = array('main', 'news', 'regisration');
    $do = (isset($_GET['do'])) ? intval($_GET['do']) : 0;

    if ($do >= 0 && $do < count($modules))
    require 'modules/' . $modules[$do] . '.php';
    else
    exit('Убей себя, хацкер!');

    intval фильтрует мусор

    P.S. бляхамуха! парсер php-кода на форуме не справляется с && !!!
    P.P.S. это не парсер. это блядский javascript заменяет & на &#38; отключил JS и спокойно запостил код :D
    руки бы оборвать!
    ιιlllιlllι унц-унц
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 1 марта 2009 г. 0:37, спустя 3 часа 36 минут 35 секунд

    Так это и есть модульная структура?
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 1 марта 2009 г. 0:42, спустя 4 минуты 56 секунд


    Так это и есть модульная структура?
    типа того, только система по идее сама должна "находить модули"
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!