iworkshop

iworkshop
Рейтинг
195
Регистрация
22.12.2008

thunderbird. Пользуюсь им уже много лет, никаких нареканий.

Подключил ящики, настроил периодичность проверки(при желании "основной" можно проверять хоть каждую минуту а "не важные" хоть раз в сутки) и всё.

Конечно после 4-5 почтовых ящиков, уже не совсем удобно, их становится многовато. Но с лишних можно сделать пересылку если будет какой то дискомфорт в работе.

В общем хз, уже не помню когда последний раз проверял почту в веб интерфейсе.

seo-mix, файлы не могут меняться сами по себе, при помощи святого духа.

Отсюда есть 3 варианта:

1) Их меняет по ftp пользователь. Подсказка - не вы. Значит спёрли доступы и надо их менять, закрывать доступ по подсети ip, а заодно проверять сайт на "подарки" от взломщиков. И кстати проверять все соседние сайты на этом аккаунте. Самый вероятный вариант, я б сказал "верняк!".

2) У вас есть крон на скрипт, который за каким то счастьем переименовывает этот файл.

3) Собственно говоря как и предыдущий, но без крона. Где то напартачили с работой с файлами.

Варианты 2,3 чисто теоретические. Сделать такое случайно - проблематично, особенно если сайт какое то время работал. 99,99% что вас взломали.

Решение проблемы соответственно - сменить доступы(на все, фтп, админку сайта(ов), доступ БД), ограничить доступ по ftp и к админке(ам) сайтов(через фильтрацию по ip(подсеть к примеру если у вас динамический - а это почти наверняка так), через спец куку или ещё как), пройтись по сайту(ам) и проверить нет ли где чего нибудь лишнего.

Если у вас сайты на CMSках - я бы ещё и их обновил. Ну или как минимум перезалил системные файлы на скачанные из офф. репозитория.

ArbNet:
iworkshop, Всё нормально, я приветствую людей которые стремятся вникать и разбираться в самом программировании как вы. А не просто прикручивают библиотеки для использования пары функций так как сами не могут что-то элементарное сделать, но зато учат других чтобы делали как они :)

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

Мы же уже это обсуждали?

У меня в данный момент не так много свободного времени и я учитываю "полезность знаний". Пока вы не сможете привести конкретных примеров и сравнений, чем ваш движок лучше распространённых CMS\фреймворков я лучше потрачу время на их изучение. Это простая логика, не бином Ньютона.

Я попросил конкретные примеры, вы мне их предоставить не смогли. Только ничем не подтверждённые утверждения. Да, может вы просто поспешили с пиаром своего проекта - но я то тут при чём? :) Будет код, будут модули(узлы или что там у вас) - будет что обсуждать. Вам об этом в топике сказали уже не раз.

Спасибо за предложение, но я откажусь. На данный момент - мне не интересен ваш движок, я не вижу выгоды от его изучения, не вижу смысла учить именно его, а не тот же lumen, silex, да хоть grav. Пока, на мой не искушённый взгляд, ваш проект указанным выше проигрывает во всем.

И если уж вы упомянули коммерческую составляющую...вы действительно считаете что в плане получения прибыли выгодней учить ваш фреймворк а не распространённые фреймворки на которых написаны тысячи(если не сотни тысяч) проектов? Это уже даже не смешно.

ArbNet, да какой движок, о чём вы?)

Неделю назад решил что было бы не плохо написать свой велосипед, классический "блог". Просто в рамках закрепления знаний и набивания шишек.

Фреймворки у меня в планах на изучение. В ближайшее время в общем то.

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

З.Ы. Но да, извиняюсь, это всё таки ваш топик по другому вопросу, а я тут флуд развел не по теме)

Stek:
Ну вы же где то идентификатор авторизации храните. Вот и стартуйте сессию только по наличию этого ключа.
В примерах выше, вы стартуете сессию при наличие ключа сессии. Т.е. бот может вам такие ключи рандомно генерить и стартовать уникальные сессии на запрос. А индентификатор авторизации уже не сгенерить, он будет не валидным.

Я понял вашу идею. Но это не работает.

В чистом виде, (просто запрос этого свойства перед session_start()) - это работать не будет. Я и избегал такой реализации, потому что, пока у нас не запущен механизм сессий все переменные в сессиях недоступны. Даже если есть сессионная кука. Так что первая проверка по любому должна быть на существование этой куки, потом старт сессии и потом уже проверка на существование и валидность свойств. Валидность и существование свойств проверяет другой метод. дублировать проверку в методе auth - я не вижу смысла.

Stek, в том чтобы запускать сессию только для авторизированных пользователей а не для всех.

Учебная задача, в чём проблема то?) И да, подскажите, какой нормальной функцией php воспользоваться, чтобы запустить сессию только для пользователей, которые уже стартовали сессию на другой странице сайта.

danforth:

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 ----------

ivan-lev:

Т.е. права проверяются ещё до роутера? А как быть с разграничением прав на отдельные контроллеры и/или action-ы? По идее, до Router-а ни тот, ни другой ещё не определены?

У меня пока всего 2 контроллера и я просто в нужных методах делал вызов функции проверки аутентификации. Если прав нет - никаких ресурсов -> исключение и 404 статус страницы.

Но вообще да, понимаю что решение кривоватое, в следующей итерации - переделаю.

danforth, об этом я не думал.

Спасибо, изучу вопрос, потестирую)

Aisamiery:
iworkshop, суть этого проекта - не использовать ничего готового, это его "фишка". Вам нужен phpunit - напишите свой =)))

К такому жизнь меня не готовила))

---------- Добавлено 14.03.2020 в 23:24 ----------

danforth:
Так лучше не делать. Сессию нужно запускать тогда, когда она действительна нужна (например, запрос с действием).

А почему? Собственно метод старт у меня прост как 5 копеек:

 public static function start()
{
session_start();
}

Мне же нужно как то определять залогенный у меня пользователь или нет.

У тестового бложика есть разные уровни доступа у пользователей и "админка". Авторизация - через сессию. Есть меню, где залогенные пользователи видят доступ к "админке"(как громко сказано) ). Получается мне сессия нужна на каждой странице(иначе как я узнаю, что ко мне пришёл залогенный пользователь и покажу ему меню "админка"?).

Вся логика доступа у меня в методе идентификации

Пытался вставить сюда, но код побило цифрами, видимо идёт подстановка чтобы ничего не подсмотрели у пользователя)

Суть простая, Проверяются иссетом куки, если куки есть(а в куки у меня пишется при "запомнить меня" при авторизации) то идёт проверка в БД на совпадение айпишника\хеша(ну, проверка от подмены)\совпадения хеша из бд и id пользователя(я от щедрот душевных и его к хешу присобачил вперемешку с некоторыми символами). Если всё ок - данные переносятся в сессию -> пользователь залоген. Тут конечно надо ещё доработать и всё вылизать, но как учебный пример сойдёт.

И опять же, с учётом того, что у меня на каждой странице сайта(даже с "фронта") есть меню админка(которое видят только авторизированные пользователи) мне везде нужно стартовать сессию...Нет можно конечно вызывать Auth::start(); и Auth::authentication(); только в некоторых методах...но это действительно того стоит? Придётся носиться с методами, прописывать в каждом методе контроллера админки этот вызов...а потом я допустим комменты прикручу к бложику и мне придётся даже с фронта прикручивать эти методы.

В общем или я чего то не понимаю и не знаю, или вы просто подумали о другой реализации аутентификации.

Aisamiery:
К сожалению вы уже более компетентные, потому что ТС сложно даже под джуна подтянуть.

Может быть. Но в любом случае я пока на уровне, когда лучше быть скромнее. Да и это не топик с предложением услуг)

ArbNet:

1) На данном этапе есть только ядро которое обрабатывает xml структуру и некоторые узлы с шаблонами и php классом для проверки работоспособности. То есть на лучше чем существующие фреймворки он пока не претендует, когда обрастёт разным функционалом тогда сайт будет конструироваться быстрее чем на существующих фреймворках.

Окей, давайте попробуем разобраться.

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 запрос, его нужно обработать. Кто этим занимается? Фронт-контроллер? Куда он перенаправляет запрос? В обычные контроллеры? Что они из себя представляют? Классы? Функции? Просто файлы которые инклюдятся по какой то логике? Нужен код "пощупать". Выложите на гит хаб, да скиньте ссылку.

ArbNet:

Чем он будет лучше? Тем что легко настраивается, пишется с ноля без прикручивания других фреймворков и тд. Всё разложено по полочкам по узлам - это связка макета к которому если надо стили, php класс с методами обработки. Хотел сделать ОРМ, но отказался. Есть класс для работы с базой данных, при написании какого то узла с методами работы с базой этого вполне достаточно, плодить классы, наследовать и тд. Зачем? Те кто умеют делать запросы к базе и без надстроек смогут работать с базой. Возможно немного доработаю сам класс работы с базой, есть мысли делать сущности просто в массивах.

Документация пока в черновом варианте, постараюсь там сделать конкретные примеры.

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

Т.е. у вас каждый узел, это связка модели с отображением? Что произойдёт если нужно будет сменить дизайн для всего сайта? Допустим в блоге есть обычные блоговые посты и какие нибудь сингл посты(аля "обо мне"). Дизайн везде один и тот же(для блоговой структуры чуть другой, но незначительно). Допустим я захотел изменить цветовую схему. Её придётся менять в каждом узле? т.е. вспоминать где из какого узла, что выводится, где что лежит и менять? Звучит сложно и располагает к ошибкам.

Обёртку над драйвером БД нужно щупать. Может у вас там что-то вроде этого: https://github.com/colshrapnel/safemysql/blob/master/safemysql.class.php с типа подготовленными запросами, которые на самом деле нифига не подготовленные, а самые что ни на есть обычные, просто с проверкой данных перед подстановкой в запрос.

Конкретики по преимуществам я не вижу. Примеров - тоже.

Вот к примеру установка lumen: https://lumen.laravel.com/docs/6.x

Где по вашему проекту такая инструкция? Хоть какая то инструкция?

ArbNet:

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

Примеров я так понимаю тоже нет? Для не большого сайта, визитки, блога...даже магазина и wordpress подойдёт. И он 100% будет удобней и понятней для любого стороннего пользователя, благо информации в сети о его настройке море.

Пока, я так понял, у вас недоблог, который ощутимо хуже любой CMS или фреймворка. Просто за счёт отсутствия гибкости, документации, дополнительных узлов, да даже с основными узлами пока тухло.

ArbNet:

3) Расширяемость элементарная. Нужен какой-то функционал, добавляется новый узел(директория в узлы), делаются шаблоны стилизуются, пишется php класс с методами. Готово. В структуре указывается что надо выводить на странице.

Окей, мне нужна отправка почты. после регистрации пользователя. В обычной ситуации я сделаю модель почты(один или несколько классов, не важно), кину это директорию моделей и подключу в нужном контроллере. У вас, я так понимаю, мне нужно сделать директорию почта(узел), потом там сделать класс моделей, потом в другом узле это подключить? Или в ядре? А Логи у вас что пишет?

И допустим я захотел поставить эту штучку https://github.com/sebastianbergmann/phpunit

Куда у вас я буду это ставить? Ваш фреймворк вообще рассчитан на работу с сторонними дополнениями?

Если нет - то никакой расширяемости у вас нет в принципе. А то что есть - есть у всех. Для wordpress бложика тоже не обязательно ставить плагины с репозиториев. Можно и свои писать с тем же функционалом. Вот только нафига?

ArbNet:

4) Пощупать пока нельзя. Хотел недавно выложить(тему вот создал) если б была заинтересованность, кто-то хотел бы помочь и в своих проектах использовать, передумал. Тороплюсь.. мало ещё что сделано чтобы продемонстрировать работу. Надо ещё доделывать...

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

ArbNet:

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

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

Примеры и конкретика, Без неё не понятно. По вашим словам у вас узел, это помесь контроллера, модели и класса вьюв. Но я так и не услышал в чём преимущества над MVC? Выглядит как каша, никакой упорядоченности, никакой иерархии.

Я думаю что вы очень быстро начнёте путаться где у вас что лежит и что за что отвечает.

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

Как итог. Я не услышал никакой конкретики в сторону "за". Собственно у вас нет примеров и вы явно поспешили с пиаром своего проекта.

Я не увидел каких либо преимуществ такой структуры проекта над MVC. Напротив, мне кажется что очень быстро это приедёт к огромным потерям времени в попытках что-то поправить.

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

Масштабируемость и совместимость тоже под очень большим вопросом.

Реализация не вышла за пределы бложика. Достаточно простенкого(на данный момент).

Лично я потрачу свободное время на изучение того же PHPunitа или doctrine.

Всего: 2626