За последние 24 часа нас посетили 17168 программистов и 1835 роботов. Сейчас ищут 1625 программистов ...

PinPIE

Тема в разделе "Прочее", создана пользователем igordata, 27 мар 2016.

  1. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну можно сделать страничку, на которой написано "Работает". Но тогда эта страничка будет перезаписывать страничку, которая могла быть создана до неё.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    хочу. почему нет? Если его проблемы решаемы - я опишу решение. Если не решаемы, ему либо надо сменить инструмент, либо отказаться от задачи. Это нормально.

    Для тебя я же предложил секурное решение, которое решает твою задачу - защитить файлы сайта. А то, что ты решаешь её таким образом - это частный случай. Её можно решить и иначе, как я решаю, например.
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    каждый инструмент имеет свои границы применимости и область, в которой он хорош. Плюшки пинпая это странички-файлики, темплейты-файлики, сниппеты-файлики и чанки-файлики. Кеширование прописывается прямо у сниппета. Вот и всё. Просто из этих плюшек что-то вырастает, например то, что твой проект получается дружит с любой системой версий.

    Задача защиты скриптов решается, как я сказал, разделением на две-три папки. Пинпай изначально делает проверки исходя из этой модели. Просто подефолту все эти пути ведут в одну папку - ту, в которой он подефолту живёт. Для нуба этого хватит, сайт заработает.

    Если нужно что-то защитить, то это делается через конфиг веб-сервера. А засовывание пхп-файлов выше не защищает ни от чего действительно опасного. =)
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Если вы мне объясните, что сделать и зачем это нужно - я обещаю, я буду запиливать всякое полезное при первой же возможности.
     
  5. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    вопрос был про самый простой хостинг работающий на Apache, тут если скопировать файлы то пахать ни чего не будет, т.к. нет .htaccess файла, я взял файл из Laravel, т.к. сам не особо шарю в настройках этого файла, вроде как все пашет, но кто знает..
    Код (Text):
    1. <IfModule mod_rewrite.c>
    2.     <IfModule mod_negotiation.c>
    3.         Options -MultiViews
    4.     </IfModule>
    5.  
    6.     RewriteEngine On
    7.  
    8.     # Redirect Trailing Slashes...
    9.     RewriteRule ^(.*)/$ /$1 [L,R=301]
    10.  
    11.     # Handle Front Controller...
    12.     RewriteCond %{REQUEST_FILENAME} !-d
    13.     RewriteCond %{REQUEST_FILENAME} !-f
    14.     RewriteRule ^ index.php [L]
    15. </IfModule>
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    т.к. данное получаемое значение подстроки нигде не используется, его можно и не получать. =) Я правда не знаю, как это сделать для апача.
     
  7. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Проблема:
    допустим у меня в templates есть такое:
    Код (Text):
    1. <title>My site - [[*page_title]]</title>
    а на странице (из папки pages) собственно:
    Код (Text):
    1. [page_title[=страница test]]
    а если я допустим не задам этот page_title можно как то задать значение по умолчанию?
    есть предложение добавить куда то значения по умолчанию, что то типа:

    Код (Text):
    1. <title>My site - [[*page_title?default=значение не задано]]</title>
    это пример, возможно какие то другие конструкции.
    --- Добавлено ---
    Еще проблема:
    возьмем сайт http://pinpie.ru/ на нем есть разделы en и ru, соответственно можно предположить что и допустим чанки и сниппеты расфасованы по папкам так же и обращение к чанкам идет как то так:
    Код (Text):
    1. [[ru/manual/tags/some_chunk]]
    и каждый раз приходится писать полный путь, а если на странице много таких чанков (находящихся в той же папке!), а что если сделать какую то команду, типа "задать путь", типа как с
    Код (Text):
    1. [var[some_chunk]]
    сделать как то так:
    Код (Text):
    1. [set_path[ru/manual/tags]]
    и все что ниже этой команды, я буду писать так:
    Код (Text):
    1. [[//some_chunk]]
    а в коде при выполнении к some_chunk будет добавляться в начало ru/manual/tags, что бы в итоге было ru/manual/tags/some_chunk.

    при этом этот set_path НЕ распространяется на обращение типа:
    Код (Text):
    1. [[ru/manual/tags/some_chunk]]
    так же и со сниппетами.
     
    #57 VLK, 10 июн 2016
    Последнее редактирование: 10 июн 2016
  8. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    а что за файл? где он? в файлах CMS о нем нет упоминаний (в файлах CMS не разу не встречается это слово).
    --- Добавлено ---
    еще такая вещь, надо бы добавить возможность выполнения каких то действий, до того как выполняется страница, например в каких случаях, допустим я хочу сделать черный список, что бы блокировать каких то.. по ip (ну или типа защита от..), можно конечно сделать сниппет и добавлять его на каждую страницу, но правильнее было бы это централизовать.
    --- Добавлено ---
    как вариант, что в CMS должен быть какой то файл, который должен подключаться, после того как произошла инициализация CMS, но до того как начинаются выполняться какие то действия со той или иной страницей.
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это мой косяк что я упустил такой важный файл описать.
    всегда перед иклудом файла страницы иклудится файл preinclude.php
    а после страницы и всего-всего инклудится postinclude.php
     
  10. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    а где, в какой папке должны находиться эти файлы? и почему в CMS в них нет упоминания, я поиском по файлам пользовался.. ни чего не было.
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я сейчас очень загружен. Но я запилю через недельку дефолтные значения для плейсхолдеров, ибо это прекрасная идея.
    --- Добавлено ---
    потому что я тупица. Они должны лежать рядом с index.php и могут меняться в конфиге.

    Вот тут есть упоминания http://pinpie.ru/ru/manual/config
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  13. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Рефактоить! Код надо причесать, подогнать под стандарты, местами разбить, методы снабдить комментариями )

    Почему Cache\Get возвращает false? Он ведь тоже может быть значением и тогда становится непонятно, или оно вернулось и всё норм, или просто в кэше ничего нет. Так же не хватает значения по умолчанию, короче типа так:
    PHP:
    1. public function get($key, $default = null) { /* ... */ return $default; }
     
  14. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    еще забыл упомянуть о такой штуке как комментарии в шаблонах, неплохо было бы.
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    заебись, это моя мечта :D ну однажды оно так и будет, конечно. Там надо отрефакторить конкретно, и это займёт время. Надо переделать чуток, но кардинально, весь внутренний механизм. Я правда не знаю, зачем это делать. Но хочется.

    я люблю фалс. Нет, не может он быть значением. Если кто-то хочет сторить свои значения так как он хочет и котролировать это - то может обращаться в кеш сам. А для пинпай это его управляющее "значение", которое говорит о том, что функция чтения из кеша фейланулась.
    --- Добавлено ---
    я стараюсь делать так, чтобы не перегружать. Много что можно ещё запилить, но я бы воздержался, т.к. это усложняет и добавляет. Комментарии в пхп-файлах можно пилить в пхп-тегах.
     
  16. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Начни с PSR-4 ) Когда заработает автолоад, можно будет рефакторить спокойно все остальное.

    False таки может быть значением. Собственно, он и есть значение ) Если в кэше пусто, то явно напрашивается null, а для ошибок есть эксепшены. Просто не очевидное поведение на самом деле.

    И запили $default к кэшу и вообще везде, где можно обратиться к тому, чего ещё нет - это реально удобно, когда в случае пустого значения тебе не нужно делать проверки, а можно сразу воткнуть значение по умолчанию.
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я не знаю, начерта тут автолоад. Поэтому не могу никак обосновать эту необходимость. Тут всё нужно и всё грузится при старте.

    у меня - не может. Это не тот кеш, который юзерский. Это кеш пинпая и у него фалс - это фалс. Это не фреймворк универсальный. Не вижу смысла делать так.

    не напрашивается. Я вас понимаю и согласен с вами. Но это не универсальный кеш, из которого можно читать, что хочется. Это кеш для хранения сниппетов. Они не могут иметь значение фалс. Сниппет это сложная структура. Если приходит фалс, а не структура - это проблема и применять дальнейший код в любом случае нельзя.

    эксепшены это сложная концепция, её нельзя вот так применять, как это было принято десять лет назад. Это порождает проблемы. Я против такого применения эксепшенов. У меня другое правило - функция может возвращать фалс. Это нормально.

    ну там дефолтом уже идёт значение из дефолтов, которые задают все дефолтные значения всех настроек пинпая. Кеш штука необязательная.

    Спасибо за это сообщение. Я вообще понимаю твои мысли и идеи. Но я от многого отказывался ради соблюдения простоты и чтобы меньше всякого кода было. Хочу придерживаться этого правила дальше. Хз что выйдет.
     
  18. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.557
    Симпатии:
    631
    Почему нельзя выбрасывать исключение при каждом удобном случае?
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    потому, что если вызываешь функцию, то нормально, что она возвращает фалс :D

    А то олд-стайл пользования библиотеками, когда ты каждый вызов оборачиваешь в трай-кеч - это головняк на мой взгляд. Когда есть батчинговые методы, которые принимают пачку на обработку, спотыкаются на середине и кидают эксепшн - это головняк опять же.

    Эксепшн нужно кидать, когда функция не может сказать, что она не удалась. Например функция "есть файл на диске" не должна кидать эксепшн, если файла нет. Она должна фалс возвращать. А вот если диск прочесть не удаётся - тогда эксепшн.

    Вообще эксепшн дорогая операция, которая хороша для дебага. Я люблю эксепшены. Поэтому хочу, чтобы была лёгкая им замена. Чтобы можно было кидать, но весь этот стек не собирался.
     
  20. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    еще такая идея появилась, может стоит внедрить какой-нибудь класс - хранилище для данных пользователя, под пользователем я подразумеваю разработчика который использует ПинПиуе, допустим я хочу подключить БД, создаю соединение, мне надо его в разных файлах использовать, где мне его хранить? каждый раз новое создавать?
    Что-то типа:
    PHP:
    1. class PinPieStorage
    2. {
    3.     protected static $storage = array();
    4.    
    5.     public static function get($key) {
    6.         return isset(static::$storage[$key]) ? static::$storage[$key] : NULL;
    7.     }
    8.    
    9.     public static function set($key, $value) {
    10.         static::$storage[$key] = $value;
    11.     }
    12.    
    13.     public static function is_set($key) {
    14.         return isset(static::$storage[$key]);
    15.     }
    16.    
    17.     public static function unset_entry($key) {
    18.         unset(static::$storage[$key]);
    19.     }
    20. }
    я сначала хотел через __set / __get замутить, но оно к сожалению не распространяется на статические свойства, по этому только так.
     
  21. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @VLK эм... емнип там на статическом классе подключение к СУБД реализовано, следовательно его и так видно отовсюду.
     
    VLK нравится это.
  22. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    @Ganzal ну это было к примеру! а так спасибо за информацию.
     
  23. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Да пожалуйста. Вот тебе еще инфа. Опять же емнип, там основной код в трейте и ты из него собираешь класс. Следовательно чем больше ты классов собираешь, тем больше подключений к СУБД имеешь.
     
    VLK нравится это.
  24. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    еще такая вопрос возник, я со страницы вызываю сниппет вот так:
    Код (Text):
    1. [[$snippet?foo=bar&cat=dog]]
    а можно как-нибудь его вызвать через php?
    ну типа:
    PHP:
    1. <?php call_snippet('snippet'); ?>
    Зачем это нужно? ну допустим на тот случай когда у меня есть какой то массив данных, который мне надо передать в сниппет, типа:
    PHP:
    1. <?php
    2. $arr = [ /* очень много всего.. */ ];
    3. call_snippet('snippet', ['foo' => $arr]);
    4. ?>
    как то так.
     
  25. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.557
    Симпатии:
    631
    Код (Text):
    1. echo '[[$snippet?foo=bar&cat=dog]]';