• Как настроить VPN на удаленном рабочем столе при подключении через RDP?

    ValdikSS
    @ValdikSS
    Подключение перестаёт устанавливаться, потому что возникает асимметричная маршрутизация: ответный трафик с сервера до IP-адреса вашего компьютера начинает маршрутизироваться через VPN, с IP-адреса сервера VPN, а не адреса вашего сервера.
    Пакет даже может дойти до вас (зависит от настроек VPN-сервера), но ваш компьютер не может связать запрос и ответ из-за несовпадения IP-адресов.

    Необходимо настроить либо policy routing для каждого интерфейса (в особенности, для физического интерфейса сервера), либо настроить RDP-сервер на bind к физическому интерфейсу (и убедиться, что у вас сохраняется маршрут по умолчанию через не-VPN-интерфейс, но при этом имеет метрику выше).
    Ответ написан
    Комментировать
  • Как настроить VPN на удаленном рабочем столе при подключении через RDP?

    @Drno
    Так и должно быть. У Вас же все пакеты(весь интернет) начинает ходить внутрь впна))

    Тут 3 варианта. Заходить внутри впн сети.
    Либо убрать впн как «шлюз по умолчанию» и прописать доступ через впн только до нужных IP адресов.

    Ну либо заходить туда через какой то софт типа Анидеска/тимвивера
    Ответ написан
    Комментировать
  • Как хранить большие JSON массивы, которые постоянно обновляются (API)?

    @rPman
    Задать сначала вопрос нужно, как именно используются полученные данные.

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

    А сами данные, в формате, получаемом от озона нужны в совместимом формате (не нужна ли агрегация данных с нескольких запросов?)?

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

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

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

    p.s. я воспринимаю хранение в файлах как использование nosql база данных, тем более что это очень даже быстро, и даже если хранение данных в режиме много файлов в одной записи

    p.p.s. хранение файлов в php формате (var_export) и подключение их include может оказаться самым быстрым способом из всех возможных, для readonly 'баз данных' (json или serialize медленнее в полтора два раза).
    upd. мне тут подсказали что есть еще более быстрый сериализатор php - igbinary и входит в поставку того же debian/ubuntu
    Ответ написан
    Комментировать
  • Как создать универсальное расширение для сайтов?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    1. Этот вариант в принципе хорошо применим для более современных фреймворков, но Yii2 достаточно старый. Он не поддерживает PSR стандарты из-за которых он очень плохо совместим с другими. То есть для Yii написать такой модуль и подключить к симфонии невозможно, так же как и наоборот. К тому же на Yii используется Active Record, а на Symfony Doctrine. Поэтому вам можно вынести только какие-то компоненты и подключать их в своих проектах. С отдельным модулем будет сложно. Модуль Yii можно будет использовать только там. Если вы пойдёте таким способом, то вам нужно вынести этот пакет в репозиторий и подключать этот пакет через композер. Внутри проекта останется настроить конфиг, настроить зависимости через DI. Пример.

    2. Второй вариант более гибче. Это уже больше про микросервисы. Приложения будут взаимодействовать через API. В таком случае вам вообще без разницы какой там фреймворк и база. Современные большие системы именно так и устроены. Однако это сложна система, на которую требуется много знаний и времени.

    На вашем месте, проектируя на Yii2 я бы не стал об этом париться. Во-первых, этот иодвль врят ли кому будет нужен. Во-вторых, он не совместим с другими фреймворками. Если вам требуется такой модуль - просто копируйте его в другой проект. Если почувствуете, что часто изменяется и нужна совместимость с другими проектами - выносите в пакет и подключайте через композер.
    Ответ написан
    Комментировать
  • Правильно ли создавать таблицу для хранения одной записи?

    @Nolan81
    программист
    Вы можете завести для таких вещей отдельную таблицу настроек:
    id name value
    где в поле value типа text хранить серилизованное значение любой настройки.

    Да и расширений таких должно хватать.
    Ответ написан
    Комментировать
  • Как реализовать динамическую генерацию CSS классов на PHP?

    @strelok011
    Не довелось применять, только слышал о новом подходе в использовании css, причем эта технология позволяет очень значительно сжать итоговый файл со стилями (на больших проектах).
    Суть такова - проект создается в классическом произвольном режиме, именуете классы как удобно, на выходе компилятор разбирает все классы, приводит к набору базовых атрибутов. То есть на выходе будет стиль вида 'a ab sc o', каждый класс отвечает только за один атрибут. Их конечное и не очень большое число, выгода на больших проектах очевидна, так же смысл парсить результат сводится к 0. В итоге, если не ошибаюсь, размер css файла порядка сотни кб, тогда как на крупных проектах может достигать не одного мегабайта, размер html разметки остается вполне вменяемым.
    Годится только для продакшн-релиза.

    P.S. Источник не подскажу.
    Ответ написан
    Комментировать
  • Как реализовать динамическую генерацию CSS классов на PHP?

    ArsenyMatytsyn
    @ArsenyMatytsyn Куратор тега CSS
    Руководитель frontend направления, предприниматель
    Отложенная загрузка + intersectionObserver + JS-фреймворк + адовые анимации в ответ на fetch тебе в этом больше помогут, чем подобные извращения. В снижении риска быть спарсенным. Да и оптимизируешь возможно слегонца.
    Ответ написан
    Комментировать
  • Как реализовать динамическую генерацию CSS классов на PHP?

    profesor08
    @profesor08 Куратор тега PHP
    https://styled-components.com/ - прям на главной редактируй код и смотри что происходит с кнопками. Там же ты поймешь, что твоя задумка гораздо сложнее и ее решение лежит в другой плоскости, и требует специальной подготовки кода и подхода к разработке, основанном на компонентах. PHP же тут просто мимо проходил и его тегом зацепило.
    Ответ написан
    2 комментария
  • Как лучше всего организовать поиск в тексте на сайте?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    "То есть я получил текст с сайта" - и где в этот момент живет этот текст? В некой временной tmp переменной? Мне кажется нет разницы хранить инфу для поиска во временном файле или в базе - всё равно тебе надо где то её иметь.
    Ответ написан
    Комментировать
  • Yii2. Как реализовать реферальную систему?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    А если вы забудете где-то наследоваться от этого контроллера? Можно вам решить и без наследования от основного контроллера. Вешайте обработчик на всё приложение используя before или after:

    'as beforeAction' => function () {
    //Тут ваши действия для анонимной функции
    }


    Если логики много используйте отдельный класс, например, поведения. Но поведения уберут в Yii3. Думайте об этом тоже)
    'as beforeAction' => [
            'class' => app\modules\users\behaviors\LastVisitBehavior::class
        ],

    Очищать URL от нужного параметра можно с
    Url::current(['ref' => null]);

    PS Мне кажется, что не надо делать реферальную ссылку на все экшены. Врядли пользователь будет менять ссылку. Да и зачем вам это учитывать. Дают рабочую ссылку на регистрацию. Там вы ищите нужный параметр. Запоминаете его и уже при регистрации всегда подставляете если есть. Но зачем вам рефералка в новостях, статьях и так далее. Не пойму целесообразность решения)

    Обычно делают как то так:
    /**
         * Страница сохранения реферера (пригласившего)
         *
         * @param int $id
         *
         * @return Response|string
         */
        public function actionReferral(int $id)
        {
            if (Yii::$app->user->isGuest) {
                ReferralHelper::setReferrerId($id);
            }
            return $this->redirect('site/registration');
        }


    /**
         * Страница регистрации
         *
         * @return Response|string
         * @throws \yii\base\InvalidArgumentException
         * @throws \yii\db\Exception
         */
        public function actionRegistration()
        {
            if (!Yii::$app->user->isGuest) {
                return $this->goHome();
            }
            $userForm = new UserForm();
            if ($userForm->load(Yii::$app->request->post())) {
                $referrerId = ReferralHelper::getReferrerId();
                $referrer = $referrerId !== null ? $this->getUser((int)$referrerId) : null;
                $userForm->setReferrer($referrer);
                if ($userForm->save() && $userForm->login()) {
                    $message = 'Спасибо за регистрацию.';
                    if ($referrer !== null) {
                        $message .= ' Вас пригласил ' . $referrer;
                    }
                    Yii::$app->session->setFlash('success', $message);
                    ReferralHelper::removeReferrer();
                    return $this->goHome();
                }
                $this->addErrorForForm($userForm);
            }
            $userForm->password = '';
            return $this->render('registration', [
                'model' => $userForm,
            ]);
        }


    class ReferralHelper
    {
        const KEY_REFERRER_ID = 'referrer_id';
        public static function setReferrerId(int $referrerId)
        {
            \Yii::$app->getSession()->set(self::KEY_REFERRER_ID, $referrerId);
        }
        public static function getReferrerId()
        {
            return \Yii::$app->getSession()->get(self::KEY_REFERRER_ID, null);
        }
        public static function removeReferrer()
        {
            return \Yii::$app->getSession()->remove(self::KEY_REFERRER_ID);
        }
    }


    Взял из готового решения на Yii2. Код не совсем хороший, но рабочий.
    Ответ написан
    1 комментарий
  • Почему не работает поиск в элементе (библиотека DiDOM)?

    @DanKud
    Я не знаю этой библиотеки, но не думаю, что она кардинально отличается от других. Вам же показывает ошибку, что метод html() не может быть вызван на массиве. Методом find() вы получаете массив, если даже он находит всего один элемент, это все-равно будет массив. Попробуйте так:
    .....
    $competitionName = $item->find('.класс внутри выборки')[0]->html();
    .....
    Ответ написан
    1 комментарий
  • Почему не работает запрос в yii2?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    имя таблицы Repair не вставили
    ->leftJoin('CheckList', 'CheckList.check_id = repair_table_name.' . $check->id)

    проверьте имена таблиц, что бы совпадали
    Ответ написан
    Комментировать
  • Где в Yii2 файлы ошибок 404 и 403(хочется перевести эти страницы)?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте товарищи программисты.
    ---
    Не так страшен код, как его трактуют ))
    Подсказку к этому вопросу как ни странно, я нашёл в папке "views/site/"
    Файл: error.php
    ===
    Разработчики поняли, что программисты столкнуться с таким вопросом, поэтому оставили подсказки:
    <?php
    
    use yii\helpers\Html;
    
    /* @var $this yii\web\View */
    /* @var $name string */
    /* @var $message string */
    /* @var $exception Exception */
    
    $this->title = $name;
    ?>


    Из них мы видим, что переменную <?=$name?>
    нам даёт <?=$this->title;?>
    А свалился этот нейм на наши головы из класса View !
    Проведя рефакторинг, я понял, что за <?=$message;?>
    Отвечает языковой пакет Yii2/
    А именно. /vendor/yiisoft/yii2/messages/ru/
    Если конечно вы в конфиге файла main.php указали русский язык. Там их куча, вы можете в этом убедится, да и сам класс показал, что используется модель подставки сообщений, через конструкцию: <?=Yii::t('yii','значение');?>

    Вы спросите, а нахера такой геморрой нужен??

    Отвечаю, во-первых, это не геморрой, а очень даже классное решение! Убивает сразу двух зайцев наповал! Мультиязычность - раз, Повторяющиеся элементы - два! Благодаря такому решению не надо ковырять весь код, достаточно заменяющие элементы заменить такой конструкцией, и всё, поменял текст или дизайн кнопки "обновить", сделал это в одном месте, в файле yii.php и всё, дизайн и текст поменялся во всём сайте, а отредактировали один файл!!! Это невероятно удобно. Так и с ошибками и с сообщениями, зачем писать на каждой страничке ручками "ваше сообщение успешно отправлено", если можно прописать значение = перевод. Так вот, в голове кода была ещё одна подсказка /* @var $exception Exception */
    и в самом классе ссылка на мануал php7 - php.net/manual/ru/exception.getmessage.php

    Таким образом мы имеем:
    class HttpException extends UserException
    {
        /**
         * @var int HTTP status code, such as 403, 404, 500, etc.
         */
        public $statusCode;
    
    
        /**
         * Constructor.
         * @param int $status HTTP status code, such as 404, 500, etc.
         * @param string $message error message
         * @param int $code error code
         * @param \Exception $previous The previous exception used for the exception chaining.
         */
        public function __construct($status, $message = null, $code = 0, \Exception $previous = null)
        {
            $this->statusCode = $status;
            parent::__construct($message, $code, $previous);
        }
    
        /**
         * @return string the user-friendly name of this exception
         */
        public function getName()
        {
            if (isset(Response::$httpStatuses[$this->statusCode])) {
                return Response::$httpStatuses[$this->statusCode];
            } else {
                return 'Error';
            }
        }
    }

    Ну так, раз мы можем указать код ошибки, public $statusCode;
    То можно тупо и условия поставить, например:
    <?=($exception->statusCode == '404') ? $this->title = "Ошибка 404" : ''; ?>
    <?=($exception->statusCode == '403') ? $this->title = "Доступ запрещён" : ''; ?>
    <?=($exception->statusCode == '500') ? $this->title = "Внутренняя ошибка сервера" : ''; ?>

    А текст ошибки под заголовком редактируется в языковом пакете:
    /vendor/yiisoft/yii2/messages/ru/yii.php
    $message

    <?php
    return [
    ...
    'Page not found.' => 'Страница не найдена.',
    'You are not allowed to perform this action.' => 'Вам не разрешено производить данное действие.',
    'An internal server error occurred.' => 'Возникла внутренняя ошибка сервера.',
    ...
    ];

    Выводится как <?=Yii::t('yii', 'Page not found.');?> и т д...
    Но вам выводить ничего не надо, класс сам определит код ошибки и выведет её текст.
    Как заменить заголовок ошибки я уже написал выше.

    --
    Это был полный разбор страницы ошибок, благодарю всех за внимание. Пока :)
    Ответ написан
    Комментировать
  • Как выполнить задачу по расписанию в Yii2?

    OKyJIucT
    @OKyJIucT
    Sunshine reggae
    Указывайте полный путь к файлу yii, что в корне лежит. Можете посмотреть его с помощью функции
    echo dirname(__FILE__);
    Ответ написан
    5 комментариев
  • Как сверстать подобное?

    tema_sun
    @tema_sun
    Картинка выглядит векторной. Так чего бы svg не использовать?
    Ответ написан
    Комментировать
  • Как сверстать подобное?

    twobomb
    @twobomb
    Canvas мне кажется легче всего и производительность в норме.
    Ответ написан
    Комментировать
  • Как сверстать подобное?

    @cluberr
    Определить абсолютные координаты и радиус каждого кружка, определить градиенты, тени и порядок наложения расставить кружки , раскрасить , определить z-индексы , основной блок сделать оверфлоу хайден...
    Ответ написан
    Комментировать
  • Как сверстать подобное?

    А разве png картинкой не подойдет?
    Ответ написан
    Комментировать
  • Как сверстать подобное?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Правильнее - нарисовать всё в векторе (SVG) и потом уже добавить другие DOM-обекты (или растровые изображения, например, лого).
    Ответ написан
    Комментировать
  • Как сделать несколько background в sass?

    sim3x
    @sim3x
    Ответ написан
    Комментировать