thunderbird. Пользуюсь им уже много лет, никаких нареканий.
Подключил ящики, настроил периодичность проверки(при желании "основной" можно проверять хоть каждую минуту а "не важные" хоть раз в сутки) и всё.
Конечно после 4-5 почтовых ящиков, уже не совсем удобно, их становится многовато. Но с лишних можно сделать пересылку если будет какой то дискомфорт в работе.
В общем хз, уже не помню когда последний раз проверял почту в веб интерфейсе.
seo-mix, файлы не могут меняться сами по себе, при помощи святого духа.
Отсюда есть 3 варианта:
1) Их меняет по ftp пользователь. Подсказка - не вы. Значит спёрли доступы и надо их менять, закрывать доступ по подсети ip, а заодно проверять сайт на "подарки" от взломщиков. И кстати проверять все соседние сайты на этом аккаунте. Самый вероятный вариант, я б сказал "верняк!".
2) У вас есть крон на скрипт, который за каким то счастьем переименовывает этот файл.
3) Собственно говоря как и предыдущий, но без крона. Где то напартачили с работой с файлами.
Варианты 2,3 чисто теоретические. Сделать такое случайно - проблематично, особенно если сайт какое то время работал. 99,99% что вас взломали.
Решение проблемы соответственно - сменить доступы(на все, фтп, админку сайта(ов), доступ БД), ограничить доступ по ftp и к админке(ам) сайтов(через фильтрацию по ip(подсеть к примеру если у вас динамический - а это почти наверняка так), через спец куку или ещё как), пройтись по сайту(ам) и проверить нет ли где чего нибудь лишнего.
Если у вас сайты на CMSках - я бы ещё и их обновил. Ну или как минимум перезалил системные файлы на скачанные из офф. репозитория.
Мы же уже это обсуждали?
У меня в данный момент не так много свободного времени и я учитываю "полезность знаний". Пока вы не сможете привести конкретных примеров и сравнений, чем ваш движок лучше распространённых CMS\фреймворков я лучше потрачу время на их изучение. Это простая логика, не бином Ньютона.
Я попросил конкретные примеры, вы мне их предоставить не смогли. Только ничем не подтверждённые утверждения. Да, может вы просто поспешили с пиаром своего проекта - но я то тут при чём? :) Будет код, будут модули(узлы или что там у вас) - будет что обсуждать. Вам об этом в топике сказали уже не раз.
Спасибо за предложение, но я откажусь. На данный момент - мне не интересен ваш движок, я не вижу выгоды от его изучения, не вижу смысла учить именно его, а не тот же lumen, silex, да хоть grav. Пока, на мой не искушённый взгляд, ваш проект указанным выше проигрывает во всем.
И если уж вы упомянули коммерческую составляющую...вы действительно считаете что в плане получения прибыли выгодней учить ваш фреймворк а не распространённые фреймворки на которых написаны тысячи(если не сотни тысяч) проектов? Это уже даже не смешно.
ArbNet, да какой движок, о чём вы?)
Неделю назад решил что было бы не плохо написать свой велосипед, классический "блог". Просто в рамках закрепления знаний и набивания шишек.
Фреймворки у меня в планах на изучение. В ближайшее время в общем то.
А с сессиями всё далеко не так просто, я рад что было обсуждение, позволило мне их глубже понять.
З.Ы. Но да, извиняюсь, это всё таки ваш топик по другому вопросу, а я тут флуд развел не по теме)
Я понял вашу идею. Но это не работает.
В чистом виде, (просто запрос этого свойства перед session_start()) - это работать не будет. Я и избегал такой реализации, потому что, пока у нас не запущен механизм сессий все переменные в сессиях недоступны. Даже если есть сессионная кука. Так что первая проверка по любому должна быть на существование этой куки, потом старт сессии и потом уже проверка на существование и валидность свойств. Валидность и существование свойств проверяет другой метод. дублировать проверку в методе auth - я не вижу смысла.
Stek, в том чтобы запускать сессию только для авторизированных пользователей а не для всех.
Учебная задача, в чём проблема то?) И да, подскажите, какой нормальной функцией php воспользоваться, чтобы запустить сессию только для пользователей, которые уже стартовали сессию на другой странице сайта.
public static function start() { if (session_status() === PHP_SESSION_ACTIVE) { session_start(); } }
А такой код вообще должен работать? При учёте что я после логина перенаправляю пользователя через header "location"?
Потому что у меня - не работает. И если я правильно понимаю логику - работать и не должно. Ведь получается что сначала идёт проверка - была ли запущена сессия, и если да вызывается session_start() и запускается сессия...как то оно не так звучит. Естественно если вызывать его после перехода на другую страницу по редиректу оно всегда будет отдавать false.
Возможно не лучший вариант, но у меня работает в таком виде:
public static function start() { if (isset($_COOKIE{session_name()})) { session_start(); } }
{} - поставил, чтобы без автозамены было.---------- Добавлено 15.03.2020 в 22:14 ----------
У меня пока всего 2 контроллера и я просто в нужных методах делал вызов функции проверки аутентификации. Если прав нет - никаких ресурсов -> исключение и 404 статус страницы.
Но вообще да, понимаю что решение кривоватое, в следующей итерации - переделаю.
danforth, об этом я не думал.
Спасибо, изучу вопрос, потестирую)
К такому жизнь меня не готовила))---------- Добавлено 14.03.2020 в 23:24 ----------
А почему? Собственно метод старт у меня прост как 5 копеек:
public static function start() { session_start(); }
Мне же нужно как то определять залогенный у меня пользователь или нет.
У тестового бложика есть разные уровни доступа у пользователей и "админка". Авторизация - через сессию. Есть меню, где залогенные пользователи видят доступ к "админке"(как громко сказано) ). Получается мне сессия нужна на каждой странице(иначе как я узнаю, что ко мне пришёл залогенный пользователь и покажу ему меню "админка"?).
Вся логика доступа у меня в методе идентификации
Пытался вставить сюда, но код побило цифрами, видимо идёт подстановка чтобы ничего не подсмотрели у пользователя)
Суть простая, Проверяются иссетом куки, если куки есть(а в куки у меня пишется при "запомнить меня" при авторизации) то идёт проверка в БД на совпадение айпишника\хеша(ну, проверка от подмены)\совпадения хеша из бд и id пользователя(я от щедрот душевных и его к хешу присобачил вперемешку с некоторыми символами). Если всё ок - данные переносятся в сессию -> пользователь залоген. Тут конечно надо ещё доработать и всё вылизать, но как учебный пример сойдёт.
И опять же, с учётом того, что у меня на каждой странице сайта(даже с "фронта") есть меню админка(которое видят только авторизированные пользователи) мне везде нужно стартовать сессию...Нет можно конечно вызывать Auth::start(); и Auth::authentication(); только в некоторых методах...но это действительно того стоит? Придётся носиться с методами, прописывать в каждом методе контроллера админки этот вызов...а потом я допустим комменты прикручу к бложику и мне придётся даже с фронта прикручивать эти методы.
В общем или я чего то не понимаю и не знаю, или вы просто подумали о другой реализации аутентификации.
Может быть. Но в любом случае я пока на уровне, когда лучше быть скромнее. Да и это не топик с предложением услуг)
Окей, давайте попробуем разобраться.
1) Я так и не понял структуру вашего ядра. Я же не просто так конкретику просил.
Давайте зайдём с другой стороны. Что происходит в тот момент когда пользователь запрашивает index.php вашего фреймворка? Ну к примеру я сейчас пилю блог в учебных целях. Очередной велосипед, но мне полезно. Не вылизанный фронт у меня выглядит примерно так:
error_reporting(E_ALL); ini_set('display_errors', 1); require __DIR__ . '/core/autoload.php'; use \App\Classes\BaseException; use \App\Classes\Router; use \App\Classes\View; use \App\Classes\Auth; try { Auth::start(); Auth::authentication(); Router::start(); } catch (BaseException $exc) { $view = new View(); $view->errMessage = $exc->getMessage(); switch ($exc->getCode()){ case 1: header('HTTP/1.1 403 Not Found'); header("Status: 403 Not Found"); break; case 2: header('HTTP/1.1 404 Not Found'); header("Status: 404 Not Found"); break; } $view->display('/blog/404.php'); }
Auth::start(); и Auth::authentication(); -> Запускают сессию и проверяют есть ли у пользователя права для доступа. Ну и выдаёт доступ к ресурсам.
Router::start(); -> парсит урл, выделяет контроллер\метод, проверяет существование и вызывает их. В методах при необходимости вызывается класс View с дизайном, подключаются модели(если нужно). При отсутствии чего либо выбрасывается исключение которое ловится в индексе. Это стандартный MVC как я его понимаю(на данный момент).
Что происходит у вас? Какая xml структура? Нам пришёл GET запрос, его нужно обработать. Кто этим занимается? Фронт-контроллер? Куда он перенаправляет запрос? В обычные контроллеры? Что они из себя представляют? Классы? Функции? Просто файлы которые инклюдятся по какой то логике? Нужен код "пощупать". Выложите на гит хаб, да скиньте ссылку.
По поводу преимуществ. Другие фреймворки(как я понимаю) разворачиваются из пакетов композера в нужной комплектации с зависимостями, нужными версиями и "гулящими женщинами и блекджеком" за пару минут несколькими командами композера. Там никакой особой магии нет. И особых сложностей тоже нет.
Т.е. у вас каждый узел, это связка модели с отображением? Что произойдёт если нужно будет сменить дизайн для всего сайта? Допустим в блоге есть обычные блоговые посты и какие нибудь сингл посты(аля "обо мне"). Дизайн везде один и тот же(для блоговой структуры чуть другой, но незначительно). Допустим я захотел изменить цветовую схему. Её придётся менять в каждом узле? т.е. вспоминать где из какого узла, что выводится, где что лежит и менять? Звучит сложно и располагает к ошибкам.
Обёртку над драйвером БД нужно щупать. Может у вас там что-то вроде этого: https://github.com/colshrapnel/safemysql/blob/master/safemysql.class.php с типа подготовленными запросами, которые на самом деле нифига не подготовленные, а самые что ни на есть обычные, просто с проверкой данных перед подстановкой в запрос.
Конкретики по преимуществам я не вижу. Примеров - тоже.
Вот к примеру установка lumen: https://lumen.laravel.com/docs/6.x
Где по вашему проекту такая инструкция? Хоть какая то инструкция?
Примеров я так понимаю тоже нет? Для не большого сайта, визитки, блога...даже магазина и wordpress подойдёт. И он 100% будет удобней и понятней для любого стороннего пользователя, благо информации в сети о его настройке море.
Пока, я так понял, у вас недоблог, который ощутимо хуже любой CMS или фреймворка. Просто за счёт отсутствия гибкости, документации, дополнительных узлов, да даже с основными узлами пока тухло.
Окей, мне нужна отправка почты. после регистрации пользователя. В обычной ситуации я сделаю модель почты(один или несколько классов, не важно), кину это директорию моделей и подключу в нужном контроллере. У вас, я так понимаю, мне нужно сделать директорию почта(узел), потом там сделать класс моделей, потом в другом узле это подключить? Или в ядре? А Логи у вас что пишет?
И допустим я захотел поставить эту штучку https://github.com/sebastianbergmann/phpunit
Куда у вас я буду это ставить? Ваш фреймворк вообще рассчитан на работу с сторонними дополнениями?
Если нет - то никакой расширяемости у вас нет в принципе. А то что есть - есть у всех. Для wordpress бложика тоже не обязательно ставить плагины с репозиториев. Можно и свои писать с тем же функционалом. Вот только нафига?
В этом то и проблема. Вы пиарите проект, которого толком нет. Может это новый symfony рождается, а может никому не нужный и кривой велосипед. Пока - больше похоже на второе.
Примеры и конкретика, Без неё не понятно. По вашим словам у вас узел, это помесь контроллера, модели и класса вьюв. Но я так и не услышал в чём преимущества над MVC? Выглядит как каша, никакой упорядоченности, никакой иерархии.
Я думаю что вы очень быстро начнёте путаться где у вас что лежит и что за что отвечает.
Пилить для себя можно что угодно, зачем искать кого то ещё для этой работы? Запилите, попользуйтесь, выявите узкие места и не удобные решения. А потом уже предлагайте кому то пользоваться или помогать с разработкой.
Как итог. Я не услышал никакой конкретики в сторону "за". Собственно у вас нет примеров и вы явно поспешили с пиаром своего проекта.
Я не увидел каких либо преимуществ такой структуры проекта над MVC. Напротив, мне кажется что очень быстро это приедёт к огромным потерям времени в попытках что-то поправить.
Преимуществ над другими фреймворками я тоже не увидел. Никаких замеров скорости развёртки типового приложения, количества запросов к БД, скорости загрузки страницы, удобства написания классов\моделей(узлов по вашему). Ну...вот вообще ничего в сторону того что у вас что-то интересное для изучения сторонними людьми.
Масштабируемость и совместимость тоже под очень большим вопросом.
Реализация не вышла за пределы бложика. Достаточно простенкого(на данный момент).
Лично я потрачу свободное время на изучение того же PHPunitа или doctrine.