строение файловой системы для не большого проекта

Discussion in 'PHP' started by Trieg, 15 Jan 2010.

  1. Trieg

    Trieg Elder - Старейшина

    Joined:
    26 Oct 2007
    Messages:
    82
    Likes Received:
    9
    Reputations:
    0
    условные обозначения:
    [badNameList] - в данный момент index, modul, admin, captha, ajax, user, page
    [all] - любое строение и именование фалов\директорий

    {ext} - расширение файлов соответствующие определеннуму типу (к примеру видео, картинки, флеш)
    {name_1} - больше 3 меньше 32 символов, только английские буквы нижнего регистра, знак подчеркиванья.
    {name_2} - тоже самое что и {name_1} но можно использовать точку.
    {name_3} - тоже самое что и {name_1} но можно использовать верхний регистр.
    {controller} - контроллер *ограничения как у {name_2}
    {modul} - модуль контроллера *ограничения как у {name_2}
    {plugin_name} - тоже самое что и {name_2}, нельзя использовать в качестве имени [badNameList]
    {theme_name} - имя темы *ограничения как у {name_1}
    {lang_name} - имя языка *ограничения как у {name_1}
    {lang_fname} - либо {controller}.php либо {controller} . {modul}.php, исключение (core.php ***)
    {class_name} - имя класса *ограничения как у {name_3}
    {namespace} - пространство имен (с версии php5.3 можно юзать это счастье)
    {plugin_name} - имя плагина *ограничения как у {name_1}
    {hook_name} - больше 4 меньше 64 символов, только английские буквы нижнего регистра и точка.
    {user_id} - уникальный id пользователя
    {temp_name} - временное имя файла *ограничения как у {name_3}.


    /themes/{theme_name}/core.{controller}.{modul}.tpl - файл шаблона (то что его вызвало является частью ядра)
    /themes/{theme_name}/theme.{name_2}.tpl - не обязательный файл шаблона, подключается в других шаблонных файлах
    /themes/{theme_name}/{plugin_name}.{controller}.{modul}.tpl - файл шаблона пренадлежащий плагину с именем {plugin_name}
    /themes/{theme_name}/style/{name_2}.css - всякие css файлы
    /themes/{theme_name}/javascript/{name_2}.js - js файлы
    /themes/{theme_name}/language/{name_1}.php - доступные языки
    /themes/{theme_name}/image/[all] - картинки, по идее сюда можно положить что угодно
    /themes/{theme_name}/plugin/{name_2}.php - специфическая логика для данного шаблона (фишки, рюшки, расширение для компилятора шаблона)
    /themes/{theme_name}/flesh/{name_2}.{ext} - флешки
    /themes/{theme_name}/{theme_name}.php - информация о авторе и секция для действий инсталяции и деинсталяции (яз что там понадобится, так на всякий случай)

    /system/language/{lange_name}/{lang_fname} - файл с куском локализации
    /system/image/[all] - картинки что использует ядро
    /system/javascript/[all] - js скрипты для ядра
    /system/engine/class/{class_name}.php - файл с php классом
    /system/engine/class/{namespace}/{class_name}.php - файл с php классом что находится в {namespace}
    /system/engine/controller/{name_1}.php - контроллер
    /system/engine/moduls/{controller}/{name_1}.php - модуль контроллера {controller}

    /system/engine/compatibility.php - отвечает за проверку на совместимость
    /system/engine/function.admin.php - функции которые подключаются только для контроллера admin
    /system/engine/function.php - куча функций, используется везде где тока можно

    /system/config.php - типичный конфиг файл что нужно отредактировать перед работой с системой

    /plugins/{plugin_name}/{plugin_name}.php - файл с информацией для инсталяции и деинсталяции компонентов плагина (создание нужных таблиц, получение нужной инфы при установке, дефолтные настройки для acl)
    /plugins/{plugin_name}/hook.{hook_name}.php - файл плагина что используется системой как один из хуков
    /plugins/{plugin_name}/modul.{modul}.php - файл плагина что используется системой как модуль контроллера
    /plugins/{plugin_name}/language/{lang_name}.php - файл локализации
    /plugins/{plugin_name}/language/{name_1}.php - файл локализации, вызывается ручками из любого места текущего плагина
    /plugins/{plugin_name}/class/{plugin_name}_{class_name}.php - Класс доступен только в том случае если вызов произошел из файла что находится в нутри директории {plugin_name}
    /plugins/{plugin_name}/template/{plugin_name}.{controller}.{modul}.tpl - подключается в случае отсутствия файла с таким же именем в нутри активной темы.
    /plugins/{plugin_name}/template/[all] - все что надо для шаблона (картинки, скрипты, стили)


    /datas/cache - хранилище для файлового кеш драйвера и для компилятора шаблонов (все свалено без поддиректорий (имена файлов не md5, пример - config.core.php и tpl.innocence.core_error404_tpl.php)
    /datas/user/{user_id}/ - тут хранятся все файлы пользователя с {user_id} (авка, фотка, картинки в подписи и все что он залил в личный архив или на форум)
    /datas/html/{name_1}.html - статистическая страница
    /datas/temp/{temp_name} - временный файл созданный ядром (как правило надо тока при обновлении какого либо компонента или иногда служит индикатором лока)
    /datas/store/{name_1}.{ext} - файлы которые автоматически обновляются (к примеру база geoIp и browscap.ini)
    /datas/system/{name_1}.php - файлы что требуется подключить до инициализации системы (пока ет некоторые конфиги)


    Пока я думаю внести следуйщие изменения:
    1 - убрать файлы что лежат в корне папки /system/engine/, создать папку /system/engine/helper и хранить файлы с набором функций, именовать так же как {lang_fname}, подрубать их автоматом, по аналогу с этим сделать папку в плагине.
    2 - убрать папку /system/javascript/ и /system/image/, в замену создать /system/хз что/ и там хранить подобную дребедень (в общем все что отдается клиенту)
    3 - все что в /system/engine/ выкинуть в /system/ а прошлую диру делитнуть

    Вопросы на которые хочется получить ответы:
    1 - Каждая тема должна содержать дизайн для админ панели, диз админки не часто меняют.. может как то по другому организовать?
    2 - Стоит ли максимально ужесточить правила для именования директорий темы и плагина?
    3 - Все имена дир и файлов в нижнем регистре кроме тех что system/engine/class стоит ли так делать? (честно скажу так сделал тока ради красоты и сам понимаю Возможные трудности но ведь их не возникнет если следовать правилам =) )
    4 - Можно ли злоупотреблять (ну ет громко сказано, не более 120 вызовов и все к частям системы что не измены) функцией file_exists для автоматизации подключения классов, наборов функций, контроллера, модуля, хуков, ланг файлов, шаблонов (по идее после первого вызова результат функции кешируется, и обращение к файловой системе на второй раз не идет.. я правильно думаю?)
    5 - Что по вашему мнению необходимо изменить\удалить\добавить?

    Чтоб не создавать еще один топик сразу спрошу про utf8:
    1 - Какие подводные камни при использовании кодировки utf8?
    2 - Какие ограничения\правила в использовании регекспов и строковых функцый с utf8?
    3 - Какие стандартные функции могут начать чудить заметив utf8?
    4 - Сколько % проблем покроет mbstring.func_overload и выставление нужной локали при учете того что регекспы не используются (это не так, но давайте представим)
    5 - mbstring.func_overload > Changeable = PHP_INI_SYSTEM | PHP_INI_PERDIR, PHP_INI_PERDIR значит что я магу менять значение юзая .htaccess?
    6 - Какие дополнительные настройки\действия вы можете порекомендовать при переходе на utf8?
    7 - Существует ли сумермегакласс который решит львиную часть возможных проблем?
    8 - Есть ли в природе список рекомендаций от разработчиков самого интерпритатора или его ядра?


    Сейчас все крутится на cp1251/PHP5.3.1/Apache2.2/дорога мне в ад но os Windows XP, объем php кода более 17к строк, весь код знаю идеально с utf-8 дела не имел(тока по мелочи), бд набита ненужной тестовой инфой, не каких парсеров пока не использую (исключение компилятор шаблонов, но если я прально понимаю то те регекспы что там не пострадают). Интересует только личный опыт, или актуальная информация из надежного источника. + ктонить может адекватно оценить время которое потребуется на переход учитывая предоставленную информацию? У кого есть полезный и проверенный код которым не жалко поделится приму в дар =).

    PS: в первую очередь интересуют ответы по теме а на utf-8 решил перейти так как многие сервисы юзают именно это кодировку так же заколебало чудить с аяксом ну и само собой этож *лять теперь модно.. запарился набирать так что сори за ошибки и опечатки, я не олень =))
     
  2. imajo.ati

    imajo.ati Banned

    Joined:
    21 Feb 2008
    Messages:
    232
    Likes Received:
    62
    Reputations:
    8
    вместо strlen, strpos, substr (и др.) используй mb_strlen, mb_strpos, mb_substr с явно указанной кодировкой в последнем параметре функции.

    вот наглядный быдлокод:
    Code:
    function my_strlen($str) {return mb_strlen($str, YOUR_ENCODING_IN_CONSTANT);}
    я бы не стал использовать utf-8 в подобном проекте.