• Как в php обфусцировать js код?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Идея умная и полезная но в реализации сложная. Яваскрипт код является публичным и потому должен быть открытым, скрытая часть остается на сервере. Если ты хочешь с сервера вываливать скрытую часть так чтобы она открылась придется хитрить по типу пары ключей и рукопожатия. То есть часть кода которая расшифровывает остальной открыта но просит у сервера ключ с помощью которого его можно распаковать. Формально там может быть как билиберда так и просто двоичка переданная в base64, а потом перед выполнением она расшифровывается. Но это тоже иллюзия скрытости, расшифрованный код с помощью консоли все равно превратится в открытый и будет через девконсоль вести на точки останова. Так что защищенное на серваке, а незащищенное на клиенте, да.
    Ответ написан
    3 комментария
  • Стили родительской темы накладываются на стили дочерней ,как исправить?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Кнопки исправить нету. Стили пишутся по рекомендации называемой бэм, когда они делаются все в один два уровня. Если тема написана в десять, вторая в десять, потом скрипты еще подключаются асинхронно хз какой раньше, то ты приехал

    Можно править по одному багу добавляя импортант гугли что это но этого хватит ненадолго, очень скоро ты и об этом пожалеешь
    Ответ написан
  • Как убрать зависимость от версии в composer?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Композер это тоже исполняемый скрипт. И исполняется он через алиас привязанный куда то. Под капотом сие запускает пыху и кормит ей пхп файл композера. В итоге в проекте написано юзать пыху такойто версии а у тебя композер другой версией выполняется. Хз я себе создал пять ярлыков композера в разные пыхи. Четыре в пыхи и один который постоянно захожу подменяю. И могу либо написать composer8 require, либо поменять глобальный алиас чтоб 8 не писать постоянно
    Ответ написан
    Комментировать
  • Как дополнить сортировку под условия?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Вообще не вдупляю где тут про сортировку кусок хтмл кода лежит. Если будет и было сначала пробежись форичем по постам заполнив поле для будет - нулем, для было - единицей, потом по полю сортируй. Если проблема в запросе в базу то надо сравнивать с current с помощью raw запроса. По этим словам гуглить вордпрессить
    Ответ написан
    Комментировать
  • Как исправить ошибку csrf Symfony при выходе из аккаунта?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Симфони пользует свою собственную сессию, то что он пытается ее стартануть еще раз говорит что какой то ваш код ее до этого открыл. Сессия в симфони если не ошибаюсь открывается при создании респонса если ты ее применял. Ктото ее открыл до респонса а так быть не должно. Скорее всего вы либо свою сессию в авторизации используете либо накосячили с сессион багами (мешками). Короче найти то можно но я думаю если с сессиями вопросы то симфони пока не надо, она без приказа ничего не делает и часто связана с делай как написано в доке или капец
    Ответ написан
    6 комментариев
  • Как правильно составить регулярку для извлечение страны из домена?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    У вас точками разделено, самое быстрое сделать сплит по точке и взять второй результат в обоих хостах

    $regex = '~[.][^.]{2}([.]|$)~';

    Читается как "точка, после которой идет две не точки, после них идет точка или конец строки".

    Если страны заранее известны вместо "[^.]{2}" пишешь "(?:ru|de|ge|en|us)" что читается как "одно из не создавая группу"
    Ответ написан
    Комментировать
  • Делаю 'git push -u' - получаю 'fatal: Текущая ветка some-branch не имеет вышестоящей ветки' - как исправить и почему такое?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    У тебя на локале нычка (ветка) есть, а куда качать оно не знает. Set upstream вяжет локал и сервак. Просто минус u надо еще указать куда. Дословно читать "пушни изменения с той ветки где я нахожусь на сервер по имени орижин и запомни что моя ветка текущая связана с серваком с веткой такойто и следующий раз не спрашивай"
    Ответ написан
  • Как ограничить количество запросов от одного IP юзера?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Простой вариант.

    <?php
    session_start(); // в апи не должно быть сессии. Но вордпресс так не думает.
    
    $hour = date('Y-m-d H');
    $minute = floor(date('i') / 10);
    $key = $hour . '_' . $minute;
    
    $counts = $_SESSION['throttle'][ $ip ] ?? []; // получаем сохраненное
    $count = $counts[ $key ] ?? 0; // берем по временной марке "сейчас"
    $count++; // увеличиваем на единицу
    $counts = []; // чистим старые временные марки
    $counts[ $key ] = $count; // сохраняем новую
    $_SESSION['throttle'][ $ip ] = $counts; // закидываем обратно в ящик
    
    // проверяем, достигнут ли лимит
    if ($count >= $limit) {
      throw new \RuntimeException('Throttling limit exceeded');
    }


    Более правильный вариант, особенно в апи:

    composer require symfony/cache

    <?php
    require_once __DIR__ . '/vendor/autoload.php';
    
    $cache = new FilesystemCache('throttle', null, __DIR__ . '/cache');
    
    $hour = date('Y-m-d H');
    $minute = floor(date('i') / 10);
    $key = $hour . '_' . $minute;
    
    $cacheItem = $cache->getItem($ip);
    $counts = $cacheItem->isHit() ? $cacheItem->get() : [];
    $count = $counts[ $key ] ?? 0;
    $count++;
    $counts = [];
    $counts[ $key ] = $count;
    $cacheItem->save($counts);
    
    if ($count >= $limit) {
      throw new \RuntimeException('Throttling limit exceeded');
    }
    Ответ написан
    1 комментарий
  • Как использовать vue с php?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    <?php
    // index.php
    $data = ['any data here'];
    echo base64_encode(json_encode($data));


    // index.js
    fetch('/api/index.php')
      .then(res => JSON.parse(atob(res.json())));
    Ответ написан
  • Связка laravel + bootstrap + vue пойдёт для web 2.0 стартапа?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Нет.

    Уберите vue. Вы не сможете в стартапе разрулить проблемы связанные с "кто важнее фронт или бэк".
    Бекари будут говорить, что у фронта есть дизайн поэтому начинают они, а фронты будут говорить, что "пусть бэк мне даст данные а я сделаю".

    Правильно здесь - фронт делает фронт по дизайну подсовывая вместо данных файлы JSON (свои, которые сам накидал на коленке). По готовности - говорит бэку реализовать выдачу таких JSON файлов из апи. Тот чешет репу вспоминая все структуры данных, деревья, вложенность и возможности, т.к. JSON это когда всё во все вкладывается и вообще свобода, а SQL база данных это когда порядок чистота и здоровье. Бэкарь осматривая JSON решает что тут поправить, и возвращает фронту "как это будет". Фронт переделывает так, чтобы "новый вариант" работал как "старый вариант", а бэк делает по своему варианту апи. Потом фронт переписывает, чтобы данные брались не из файлов, а из апи.

    Плюс команда удваивается, вам нужен чел который шарит и в том и в этом.

    Сделайте на бэке с использованием пхп (команда пыхарей и всё), чтобы у вас был "примерный вариант" без красивостей и с перезагрузкой страницы, с формами, может даже пока без апи.

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

    Сильнейшая вещь ларавеля - легко войти в проект, т.к. всё читабельно.
    Слабейшая вещь ларавеля - легко войти в проект, кругом ужас, который написали "дешевые" специалисты.

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

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

    Чтобы подключить мощь фронта к бекенду - дайте бекендеру разобраться в пакете symfony/encore. Это позволит ему на пыхе использовать webpack, а не прыгать то в Vue то в Пыху и косячить и там и там.

    И ради бога (не ешьте желтый снег) - возьмите бекендера, который разбирается зачем устанавливается каждый пакет в проект. В ларавеле очень любят "просто ставить пакеты", а лара из коробки ставит "laravel/horizon" - админка для редиса, которая требует поддержку линуксовых сигналов. Чтобы это запустить начитанный девопс собирает докер, который на слабых компах и половине крякнутых виндовсов работает криво, что потом заставляет брать в проект чуваков с аймаками, которые мало умеют, зато понтов полный ящик, в итоге потом эти проекты-убийцы гуляют от конторы к конторе и все ищут умельца кто может это ХОТЯ-БЫ ЗАПУСТИТЬ.
    Ответ написан
  • Какой парсер HTML на PHP выбрать?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Рекомендация Протько устарела.

    Парсер парсит с ошибками, стоит в тексте ссылки попасться &lt; и парсинг уже пошел по трубам, и хотя simple_html_dom заставляет шторм лагать больше, т.к. не поделен на неймспейсы, но работает быстрее, проверено на сайте с 50 тысячами страниц, субьективно simple делал быстрее.

    Сейчас буду искать новый.
    Пока попробую этот: `dimabdc/php-fast-simple-html-dom-parser`
    Ответ написан
    4 комментария
  • SymfonyEncore + jQuery + Bootstrap: Не работает только с бутстрапом, а с остальным - нормально, как починить?

    gzhegow
    @gzhegow Автор вопроса
    aka "ОбнимиБизнесмена"
    Блин, разобрался :)

    Верстка с мануала бутстрап 4, а либа подключена версии 5.
    Там на атрибутах есть еще "bs":
    // data-bs-toggle="modal"
    // data-bs-target="#modalAlbum"
    // data-bs-dismiss="modal"
    Ответ написан
    Комментировать
  • Почему увеличивается сила тока при параллельном соединении батареек?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Этот ответ может звучать как бред, но попробуй.
    После него становится понятно как ток с электростанции МГНОВЕННО оказывается в твоем утюге.

    Задался ответом на вопрос - откуда ток в розетке или ещё формулировка "сколько ампер в розетке". Напряжение - то мы все знаем 220, значит, вольт.

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


    В итоге получился ответ "как-то там оно работает" (ответ от электрика)

    Но в итоге нужно просто вспомнить химию, а не только физику.
    Внутри вещества у нас что? Атомы.
    У атомов - электроны.
    Электроны что? Движутся хаотично.

    Пару слов о постоянном токе и почему он "от плюса к минусу". Если мы ток получаем химическим путем - то есть алюминий и медь в электролит, то на одном из электродов появляется осадок. В химической реакции двигаются "ионы" - это атомы, у которых электронов не хватает и в химической среде они двигаются туда, где есть лишние электроны. И вот они сами положительно заряженные, и идут они в сторону скопления отрицательно заряженных электронов. Вот и решил когда-то Ампер записать что ток идет в сторону от плюса к минусу. Потом поняли, что чтобы создать ток совсем не обязательно растворять и двигать сами атомы, а можно двигать то, что их наполняет - и начали магнитным полем двигать электроны. И получилось что электроны идут против тока, т.к. они в две тысячи раз меньше атомов и двигать их проще.

    Напряжение в этом случае всего лишь СИЛА заставляющая электроны двигаться в нужную сторону, создавая подобно ветру область с "низким давлением" (концентрацией электронов) в одном месте и высоким в другом - выдергивая электроны с одного места провода и затаскивая туда, где они уже были выдернуты - происходит такое вот упорядоченное движение зарядов.

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

    Когда мы рассматриваем генератор, вращающаяся катушка / рамка пересекая магнитное поле разгоняет электроны в две стороны, по полюсам этого поля и если мы туда подключим что-то электроны побегут по цепочке восстанавливая назад баланс. Возможность генератора постоянно расталкивать электроны по полюсам при вращении и позволяет нам говорить что "в розетке 220 вольт". А на расческе почесав шерсть есть киловольт, но мы же не можем расческой запитать обогреватель дома. Потому что отдав первые электроны - новых нет. А при вращении мы постоянно циклим этот процесс туда-сюда меняя полюса, после чего выпрямителями и стабилизаторами отсекаем ток бегущий обратно, делая из него направленный в одну сторону, и в итоге прибор таки запускается из-за постоянства процесса. Ты скажешь - бывают же металлические расчески. Эти расчески сами проводят электроны в любую сторону. Почесав шерсть такой расческой мы просто немного обогатим её электронами, которые немедленно разбегутся в те места где их не хватало, в итоге расческа отдать нам электронов без дополнительно приложенной силы не сможет.

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

    Если что с выхода атомной станции имеем 750 киловольт силушки. Это силушка, которая будет поддерживаться, а не одномоментная, она способна сжечь всё и нахрен, а получили ее точно так же - вращая гигансткие катушки в магнитных полях и суммировав. И вот эта мощь богов отправляется по проводу на город, разделяясь в тысячи проводов (при разделении на 1000 проводов напряжение не упадет, но вот силовые трансформаторы могут поделить её и отправить больше вольт туда меньше сюда), затухая с расстоянием и с помощью других повышающих трансформаторов повышаясь по-дороге там где дофига затухло.

    Тут же понимание, почему если подать 15 киловольт на нагрузку при плохой изоляции - ток может пойти через воздух или какой-нибудь диэлектрик в непосредственной близости - сам провод это условная труба, через которую току легко идти, потому что провод сопротивляется электронам меньше чем воздух вокруг него. Но при таких больших пинках и фиговой изоляции электроны летают вокруг и выбиваются наружу, их вполне может хватить для того, чтобы пойти прямо "по воздуху", как это делает молния при грозе - большое скопление электронов болтающихся в воздухе и вот эти электроны могут себе пробить путь через это поле, т.к. в нем сопротивление будет меньше чем в окружающем воздухе.

    Наивно думать, что при этом самому проводу ничего нет. Через пару десятков лет он тоже износится. И чем больше скачков напряжения на нем было, тем быстрее это будет, каждый скачок вызовет какой-то да нагрев, а когда металл греется - он может удлинниться, стать тоньше и в итоге - порваться. Тогда мы будем "менять проводку в доме".

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

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

    В этой карте я не могу пока только описать сверхпроводники. Это те, которые заморозившись полностью игнорят пролетающие через них электроны и не мешают их передвижению. А явление - которые при определенной температуре заключают ток внутри себя и он не гаснет, даже если источник выключить. Но для этого их надо охлаждать до офигительно низких температур. Что кстати приведет к тому, что проводник над магнитным полем будет летать. Буквально.

    Надеюсь теперь понятно, что он при параллельном не увеличивается, его _можно_посчитать_ с помощью суммы, ибо каждая ветка этой цепи будет выдавать тем меньше электронов, чем больше там проблем с передачей силушки дальше - чем больше приборов, сопротивлений и других разных. Что еще это дает? Ответ на вопрос: "в чем сила брат" - в металле и магнитах :D
    Ответ написан
    Комментировать
  • Как узнать ip через звонки P2P?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Попробуй поставить Wireshark, прекрасная программа которая если привыкнуть - показывает пакеты и сами данные всего исходящего и входящего траффика с фильтрами. По ней можно даже сокеты выучить, не только увидеть куда.

    Либо есть проще вариант - открыть антивирус и посмотреть куда нагружается сеть когда программа работает, там обычно пишется адрес и порт.
    Ответ написан
    Комментировать
  • Как можно сформулировать разработку адаптивного сайта?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Разрешения по горизонтали и вертикали, с которыми лично ты будешь проверять работу. Некоторые пишут какие-то требования по процессору и оперативке но это дичь. Сайт может жрать мегабайтов 30 памяти. А может жрать полгига на конфиг и миграции, зависимости и тд. Напишешь 30мб скажут что это фигня и так не бывает. Напишешь полгига и сделают что сайт на одного человека будет полгига жрать.

    Отрисовать минимум три дизайна:
    1. мобильный (узкий)
    2. десктопный (широкий, высокий (4:3, 16:10))
    3. десктопный2 (широкий, низкий (16:9, 21:9))

    Почему два десктопа? Иногда для продаж важно, чтобы кнопка поместилась в первый экран, когда ты заходишь с планшета. А дизайн часто рисуют так, что на десктопе очень большая картинка, галерея, слайдер и т.д. и по высоте оно входит, если 1024, но вот если 1366:768 - уже нет. Лучше рисовать два, или сразу первый и третий.

    Потом описать вида:
    - страница сайта, действия на этой странице (каждая кнопка кроме ссылок на другие страницы)

    Это минимум. Дальше расширяется по ходу работы. Например фоновая отсылка почты. Очереди для обработки заказов. Платежные системы (подключение готовых или апи для своей) и проч.
    Ответ написан
    Комментировать
  • Как правильно делать счетчики на сайте?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Редис. Счетчики могут быть переключены одновременно сотней людей, транзакции это будет конец. Чтобы принять запрос его хорошо бы сделать тем меньше чем возможно, хттп запрос это не самое малое что можно передать. Открыв сокет и плюнув датой, хешом юзера и айди счетчика, да все это в бинари, данных будет существенно меньше
    Ответ написан
  • Расшифровать хеш?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    <?php
    
    $t = '\u0427\u0435\u0441\u043d\u043e\u043a: \u042e\u043c\u043e\u0440 \u0434\u043b\u044f \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u0445';
    
    var_dump(preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
        return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
    }, $t)); // Чеснок: Юмор для взрослых
    Ответ написан
  • Объясните отрезок кода php?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    <?php
            /** @var bool */
            public $exit = true;
            /** @var bool */
            public $exitFullUsage = false;
            /** @var bool */
            public $help = true;
            /** @var bool */
            public $optionsFirst = false;
            /** @var ?string */
            public $version;


    это объявлены свойства, которые можно будет получить через $object->{ $name }; (потому как они помечены как публичные)
    для удобства работы в PhpStorm и чтения указаны их типы данных, когда часто работаешь с кодом позволяет не тратить время на то, чтобы долго не вкуривать и не разбираться. Достаточно знать что там лежит.

    <?php
          public function __construct($options=array())
            {
                foreach ($options as $k=>$v) {
                    $this->$k = $v;
                }
            }


    На вход бросается массив, который потом проходится по очереди каждый элемент и втыкивается в свойства которые обьявлены выше. Доллар после стрелки означает что само имя должно быть подставлено.

    Но код косячный потому что пхп позволяет обьявлять свойства динамически. То есть даже если поля нет, его можно передать и оно появится. Надо проверять еще
    <?php
    if (! property_exists($this, $k)) throw new \Exception('Нет свойства');
    Ответ написан
    1 комментарий
  • Заполнение формы с переадресацией и автозаполнением полей?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Так не будет, это левый сайт.
    Поле может заполнить только пользователь самостоятельно.

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

    Если бы оба сервера твои были - то делаешь на црм-ке поддержку прихода данных и заполнения их автоматом, а потом на проекте 2 скрипт который пересылает на первый
    Ответ написан
  • Как передать id строки таблицы в другой php-файл?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    так она должна быть с бэка отдана при строительстве таблицы и вшита в кнопку Удалить

    проще говоря если ты фронт и рисуешь данные то по запросу таблицы программисты бекенд должны отдавать тебе или айди или готовую ссылку на удаление
    Ответ написан