raidhon: Я отвечу вам в последний раз, поскольку более нет желания общаться с человеком, который хамит и плохо понимает написанное.
Я нигде не говорил, что di нельзя реализовать средствами языка. Я лишь сказал, что di нет в метеоре.
Отсутствие абстракций в js, как минимум не даст вам реализовать ISP и DIP из SOLID. DIP говорит, что модули должны зависеть от абстракций, но в js их нет. Поэтому мы в любом случае зависимы от конкретных реализаций. Angular 1 может быть вам в пример. Из этого же вытекает то, что как минимум Low Coupling, Polymorphism и Protected Variations из GRASP так же будут нарушены.
raidhon: ничего выше из перечисленного не решает проблему сильной связанности и не позволяет следовать grasp/solid и вообще писать вменяемый код, за исключением typescript. Но нужно понимать, что это новый язык, обратно совместимый к javascript и в него компилирующийся и появился только потому, что спецификация ecmascript примитивна.
А то что в сообществе куча разных сборщиков, то что каждый считает своим долгом написать свой собственный пакет менеджер, да и очередной компилятор не против запилить. Так это минус, но не плюс. Потому что, приводит к хаосу. Скоро будете сборщики сборщиков писать и компиляторы компиляторов. Удачи.
Кирилл Даншин: причем тут catch? set_exception_handler это последняя возможность сделать что-то при непойманом исключении, прежде чем оно будет выброшено.
Вы ему что предлагаете весь код приложения завернуть в try catch блок или каждое исключение ловить и обрабатывать? Не, не круто. Нужно использовать инструменты по назначению. Здесь catch можно использовать только если автор хочет восстановить работу программы (например попробовать переподключиться или подключиться к другой бд и т.д.) в других случаях нужно пробрасывать исключение до set_exception_handler и там уже его оформлять в 500 ошибку в html/xml/json и т.д. форматах.
Борис Якушев: нет. Лучше использовать php.net/manual/ru/function.set-exception-handler.php и в дебаг режиме отдавать 500 ошибку со стек-трейсом для отладки, а в продакшн режиме просто уведомление, а стек-трейс писать в лог. Режимы можно переключать через константу определенную в index.php.
Вам нужно избавляться от дублирования кода. Зачем вы будете везде писать один и тот же код закрывающий соединение с бд, когда это можно сделать в одном месте на каком-то этапе выполнения приложения, когда соединение с бд уже точно не потребуется.
А вообще я бы не закрывал соединение. Потому что во-первых оно само закроется по завершению запроса, а во-вторых php приложение можно поднять как демон и тогда соединение с бд нужно будет держать постоянно открытым пока жив демон.
>где-то читал что лучше поставить какой-то аналог- вроде mirandabd,
Может MariaDB ? Это форк mysql, его ведут оригинальные разработчики mysql, после приобретения последнего компанией oracle. MariaDB это свободное ПО, а вот с MySQL нихера не понятно. Разницы что ставить особо нет и то и другое будет нормально работать.
Сергей Прищенко: Ты можешь отправить http запрос к скрипту с бесконечным циклом, внутри которого проверять любые события и сразу же их отправлять на клиент, но не закрывать соединение. По таймауту клиент или сервер будут разрывать соединение, после чего клиент будет моментально устанавливать новое. Это лучше чем постоянно долбить сервер запросами, но хуже чем вебсокет.
Смотрите пример. https://github.com/yiisoft/yii2-app-basic/blob/mas... Это экшн для логина юзера на сайте. Он создает модель LoginForm, вызывает у неё методы load и login, затем объект модели скармливается во вьюху login.
Контроллер это обычный класс с методами. Каждый метод - это действие контроллера (action/экшн). Тот или иной экшн ваше приложение будет выполнять на http-запрос от клиента. Внутри экшена просто создаете объект модели и вызываете нужные вам методы, результат передаете во вью. Всё.
Юрий: вы безусловно правы. Но можно еще токен сохранять не в сессии, а в куке. На сервере ожидать, что токен придет в заголовке/теле и сравнивать его с тем, что в куке. Это позволит и анонимных пользователей защитить от csrf.
Относительно немаленький это сколько? Я комфортно читал доки и любую другую обыденную речь примерно с 3,5 тыс. слов. если верить этому сайту testyourvocab.com
Алексей Тутубалин: ну вот, настрой веб сервер на ведение логов и в следующий раз, когда обнаружишь что-то странное, будь то шелл, неверные данные в бд, взломы юзеров, то иди и смотри логи, там будет всё, чтобы понять где баг в системе. Сейчас искать бессмыслено, это будет гадание, жди пока опять зальют. Или можешь попытаться погуглить какие эксплойты были в твоей версии дле до обновления.
Алексей Тутубалин: у вас веб сервер не пишет логи? Тогда не узнаете ничего. А вообще, посмотрел время создания шела, нашел в логах веб сервера запросы на заданное время, посмотрел какие запросы отправлялись хакером и воспроизвел баг. Дальше юнит-тест, фикс, коммит, продакшн.
Евгений: такую защиту, как "аякс запрос раз в минуту" можно обойти. Greasemonkey (https://en.wikipedia.org/wiki/Greasemonkey) например умеет менять страницу до/после загрузки. Если сервис станет хоть немного популярен, то быстро напишут и распространят в интернет плагин. После загрузки страницы достаточно clearInterval(id), чтобы обойти защиту.
Вы никак не защититесь, если видео уже полностью загрузилось с сервера в браузер клиента. Даже с вебсокетами. Тут нужно идти от обратного, не пускать в аккаунт никого, пока под этим аккаунтом кто-то. Ну как в кабинку туалета. Но, это можно сделать нормально только с помощью вебсокетов/флеша. Но нужно заранее думать, как масштабироваться, ибо linux без хаков не позволит одному процессу открыть более 1 тыс. дескрипторов.
Если вы не знаете вебсокетов, то чтобы сделать более-менее нормально, потратите много времени. Я бы на вашем месте, не делал вообще ничего. Ну или если вам так печет, то можете не разрешать входить в аккаунт в течении N времени с другого ip, ну или что-то такое. Хотя, это очень кривое решение.
Сергей: а вы можете подсказать, как сделать чтобы внутреннее состояние системы не нарушилось? У меня похожая задача. Мне нужно записать данные в бд и через определенное время выполнить с ними некие действия. Как можно гарантировать, что при записи данных в бд создастся и сообщение в rabbitmq? Чтобы избежать ситуации, когда данные в бд записались, а сообщение в rabbitmq не создалось. То есть мне нужна атомарность, либо всё (запись данных и сообщение в rabbitmq) либо ничего. Это можно как-то сделать? В качестве бд используется mysql.