• Доступ к GeoLite будет закрыт из за санкций?

    @axce1
    Хоть автор и решил свой вопрос, другим тоже пригодится. Я нашел на github доброго человека который обновляет базы от MaxMind. Качает с сайта со своим ключем и выкладывает в реп (подробности в action файле)

    https://github.com/P3TERX/GeoLite.mmdb
    Ответ написан
    Комментировать
  • Какие книги посоветуете по нейросетям?

    Maksim_64
    @Maksim_64
    Data Analyst
    Для новичков ответ очевиден, нет ничего и близко равного Deep Learning with Python, Second Edition . От инженера гугла и создателя Кeras François Chollet. Она и на русском есть, если не владеешь английским. Не много не мало гениальная книга, и доступна для людей без математического бэкграунда.
    Ответ написан
    Комментировать
  • Сайт на docker медленно работает?

    @metajiji
    Есть такое да, если делаете паблишинг портов, то на голом докере по умолчанию это произойдет через docker-proxy у которого катастрофически низкая производительность + огромный аппетит к Cpu, выход крайне простой - при создании контейнеров, которые будут взаимодействовать с внешним миром используйте --net host. Например у вас есть php-fpm, nginx и любая бд, в таком случае делаете --net host для nginx, остальные могут оставаться в сети docker, конечно же вам понадобится icc(inter container communication) и для этого нужно создать так называемую user-defined network. Для упрощения жизни создавайте контейнеры через docker-compose.
    Ответ написан
    1 комментарий
  • Как в Yii2 checkbox сделать checked?

    @gomer1726 Автор вопроса
    Ребята разобрался нужно атрибут 'checked ' с лишним пробелом
    <?=$edit_form->field($model, 'serv1')->checkbox([ 'value' => '1', 'checked ' => true])->label('');?>
    Ответ написан
    1 комментарий
  • Где нужно делать composer update - в контейнере, или в папке с проектом?

    @art055
    Вообще хорошим тоном является провалится в контейнер docker exec -ti названиеКонтейнера bash и только там сделать composer update (можно еще опции ,к примеру composer update --ignore-platform-reqs)
    Ответ написан
    Комментировать
  • Как реализовать отслеживание выбора select2?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    У него есть свой триггер select2:select

    $(<некий_селект>).on('select2:select', function(){
        console.log(this.selectedOptions); // HTMLCollection где каждый элемент - HTMLOptionElement, у которого соответствующие атрибуты
    });
    Ответ написан
    Комментировать
  • Как узнать положение курсора в div'e с contentEditable="true"?

    midnightcoder-pro
    @midnightcoder-pro
    Full stack разработчик
    Знаю, поздно
    function getCursorPosition(parent) {
    	let selection = document.getSelection()
    	let range = new Range
    	range.setStart(parent, 0)
    	range.setEnd(selection.anchorNode, selection.anchorOffset)
    	return range.toString().length
    }
    
    function setCursorPosition(parent, position) {
    	let child = parent.firstChild
    	while(position > 0) {
    		let length = child.textContent.length
    		if(position > length) {
    			position -= length
    			child = child.nextSibling
    		}
    		else {
    			if(child.nodeType == 3) return document.getSelection().collapse(child, position)
    			child = child.firstChild
    		}
    	}
    }
    Ответ написан
    2 комментария
  • Почему в yii2 очередях отрабатывают только триггеры: Queue::EVENT_BEFORE_PUSH и Queue::EVENT_AFTER_PUSH?

    Zhuravljov
    @Zhuravljov
    php-программист
    Отправка и получение сообщений происходит в разных процессах. Вы вешаете обработчик EVENT_AFTER_EXEC в процессе, который отправляет сообщения. Воркер-процесс про это ничего не знает, а именно он триггерит EVENT_AFTER_EXEC.

    Оформите обработчик события в виде Behavior-а ( по типу LogBehavior), и подключите его в общий конфиг. Это решит проблему.
    Ответ написан
    7 комментариев
  • Как составить запрос between в Yii2?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Цитирую доки:
    between: operand 1 should be the column name, and operand 2 and 3 should be the starting and ending values of the range that the column is in. For example, ['between', 'id', 1, 10] will generate id BETWEEN 1 AND 10
    https://github.com/yiisoft/yii2/blob/master/docs/g...
    Ответ написан
    1 комментарий
  • Как правильно оформить helper функции?

    Minifets
    @Minifets
    Hello world!!!
    el.find( selector ), как это делается в jQuery.


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

    String.prototype.customFunction = function () {
        console.log('кастомная функция');
    };
    
    let a = 'test';
    a.customFunction();
    "test".customFunction();
    Ответ написан
    Комментировать
  • Как сделать PDO + IN?

    @heartdevil
    плыву как воздушный шарик
    Привет.

    Вот вырезка

    /* Execute a prepared statement using an array of values for an IN clause */
    $params = array(1, 21, 63, 171);
    /* Create a string for the parameter placeholders filled to the number of params */
    $place_holders = implode(',', array_fill(0, count($params), '?'));
    
    /*
        This prepares the statement with enough unnamed placeholders for every value
        in our $params array. The values of the $params array are then bound to the
        placeholders in the prepared statement when the statement is executed.
        This is not the same thing as using PDOStatement::bindParam() since this
        requires a reference to the variable. PDOStatement::execute() only binds
        by value instead.
    */
    $sth = $dbh->prepare("SELECT id, name FROM contacts WHERE id IN ($place_holders)");
    $sth->execute($params);


    То есть, по сути, тебе можно вручную вот такую шнягу сделать
    'WHERE id in (?,?,?,?,?,?,?)'
    
    и собачить типизированные параметры
    
    ->bindParam(1, $id, PDO::PARAM_INT);
    ->bindParam(2, $id, PDO::PARAM_INT);
    ...
    
    Но это за тебя сделает
    
    вот эта штука
    
    $place_holders = implode(',', array_fill(0, count($params), '?'));
    
    насколько я понял.

    тадам
    Ответ написан
    Комментировать
  • Как css парсит селекторы?

    Комментировать
  • Куда положить dump.sql для автоподнятия БД с нужного дампа Docker?

    @Senture Автор вопроса
    Разобрался.

    Вот мой код:
    version: "2.15.1"
    
    services:
      postgres:
        image: postgres:13.3
        environment:
          POSTGRES_DB: "username"
          POSTGRES_USER: "username"
          POSTGRES_PASSWORD: "username"
          PGDATA: "/var/lib/postgresql/data/pgdata"
        volumes:
          - ./Initer:/docker-entrypoint-initdb.d
          - usr-data:/var/lib/postgresql/data
        ports:
          - "5437:5432"
    
    volumes:
      usr-data:


    В этом случае, нужно создать директорию Initer в корне (где лежит docker-compose.yml) и в нее положить необходимый dump.sql и все работает.

    Важно!: Если папку не создать, она появится автоматически после docker-compose up. Но будет естественно пустой, и даже если сделать down, в папку положить дамп, и поднять приложение (docker-compose up) бэкап уже не накатится, т.к. БД уже была проинициализирована ранее и никакие изменения к ней применяться не будут.

    Прошу прощения за такие глупые вопросы :D
    Ответ написан
    6 комментариев
  • Почему появляется ошибка?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Это же элементарно! У скрипта нет прав доступа к исследуемому файлу. Проверьте через is_readable().
    Ответ написан
  • Есть ли возможность сделать табы TabsX Kartik неактивными?

    @edvardpotter
    [
                'label' => '<i class="glyphicon glyphicon-briefcase"></i> Вкладка 3',
                'content' => DetailView::widget([
                    'id'=>'info1',
                    'model' => $model,
                    'panel' => [
                        'heading' => '<h3 class="panel-title">'.$model->Name.'</h3>',
                        'type'=>DetailView::TYPE_SUCCESS,
                    ],
                    'attributes' => $info_three,
                ]),
                'encode'=>false,
                'headerOptions' => ['class'=> $value ? '' : 'disabled']
            ],

    Где вместо $value, ваша переменная которая может быть пустой($model или наверное $info_three)
    Ответ написан
    3 комментария
  • Как защитить свое api от ddos-атак?

    @rPman
    Хочу напомнить - ddos это не только про сетевые атаки, а любые атаки, направленные на нарушение работы приложения,.. т.е. если злоумышленник найдет как заставить твоих операторов обрабатывать тысячи и миллионы заявок, которые никакой пользы не принесут (с них не будет получен доход) - то это тоже 'атака на отказ обслуживания', ведь операторы будут заняты фейковой работой вместо обслуживанием нормальных клиентов.

    Готовых решений ты и не найдешь, кроме как от ограниченного типа атак (сетевых) и тут самому лучше не заморачиваться, а воспользоваться сервисом провайдера.

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

    p.s. типовые направления атак ddos используют анонимные каналы, т.е. любые команды от анонимного пользователя, которые нельзя сгруппировать по их иннициатору (да хоть по ip адресу) - первые на проверку возможности для использования, вот их и проверяй, как можно раньше в бизнеспроцессах вводи авторизацию (пусть и прозрачную), лимитируй пользователей во всем на разумные количества действий (обычный человек не будет создавать сотню заявок на покупку унитазов, как минимум он создаст одну с пометкой количества).

    p.p.s. ограничивая пользователей, всегда предлагай им действия, которые позволят этот лимит убрать, чтобы ошибочно наказанные пользователи не сидели перед экраном - 'вы забанены, идите на..й'
    Ответ написан
    Комментировать
  • Как работает htmlspecialchars()?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну уж для такой-то простой функции должно быть достаточно написанного на странице документации.
    И, в частности, про ENT_QUOTES ;)

    Эта функция заменяет спецсимволы, которые являются управляющими в контексте HTML, на безобидные HTML-сущности. Вот и всё.
    Чисто визуально управляющие символы будут выглядеть так же, как и должны, но в коде не будут представлять ни малейшей опасности.

    Для XSS важно, будут ли экранироваться одинарные кавычки или нет, если одинарные кавычки используются для ограничения атрибута.
    Пример

    <?php $name = "' onclick='alert(\"pwned!\")"; ?>
    <input value="<?=htmlspecialchars($name) ?>"> Не важно. Весь текст так и заключен в двойные кавычки
    <input value='<?=htmlspecialchars($name) ?>'> Важно. Закрыли одинарную, вписываем, что хотим

    Во втором случае этот код отрендерится, как
    <input value='' onclick='alert(&quot;pwned!&quot;)'>
    (но при этом &quot; отрендерятся в двойные кавычки, и в onclick будет уже валидный яваскрипт
    alert("pwned!")

    А с взведенным флагом ENT_QUOTES мы получим
    <input value='&#039; onclick=&#039;alert(&quot;pwned!&quot;)'>

    И хотя значение внутри атрибута отрендерится, как ' onclick='alert("pwned!"), но оно все целиком будет внутри атрибута value.

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

    К счастью, РНР уже позаботился о вас и ваших друзьях. Начиная с версии 8.1, флаг ENT_QUOTES ставится по умолчанию. И приведенный выше пример будет работать только на устаревших версиях. Так что ручное добавление уже уходит в область легаси-практик.

    Чтобы не ломать пальцы, каждый раз набирая всё это htmlspecialchars ENT_QUOTES, толковые джуны всегда пишут пользовательскую функцию-макрос, типа
    function esc($var) {
        return htmlspecialchars($var, ENT_QUOTES);
    }

    Правда, надолго с этой функцией не задерживаются, потому что она годится только при обучении. А любой проект сложнее, чем домашняя страничка про любимого котика, в обязательном порядке уже должен для вывода использовать специальный шаблонизатор, например Twig. Где весь вывод идет с помощью специального оператора, который уже по умолчанию экранирует HTML
    <input value="{{$name}}"> Не важно. Все уже проэкранировано до нас

    Важно помнить, что это экранирование работает только в контексте HTML.
    Если выводим данные внутри кода яваскрипт, то htmlspecialchars поможет как мертвому припарки. И в этом случае надо использовать json_encode.

    Ну и разумеется, надо не забывать комбинировать все варианты экранирования.
    Например, код яваскрипт, который пишется в атрибут HTML тега, надо весь целиком экранировать c с помощью htmlspecialchars. А данные для этого кода - c с помощью json_encode:
    <button onclick="<?= htmlspecialchars("window.open(".json_encode($name).")", ENT_QUOTES) ?>">
    Ответ написан
    2 комментария
  • Как сохранять значение в depdrop после перезагрузки страницы?

    muzikant777
    @muzikant777
    PHP/Vue разработчик
    Попробуйте для второго селекта указать
    'pluginOptions' => [
                    'depends'=>['typ-id'],
                    'placeholder'=>'Sub...',
                    'initialize' => true,
                    'initDepends'=>['Cat'],
                    'url'=>Url::to(['orders/subcat']),
                ],


    Ссылка на пример: demos.krajee.com/widget-details/depdrop#advanced-usage
    Ответ написан
    Комментировать
  • Какую библиотеку выбрать для построения графиков/диаграмм для проекта на Laravel?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Графики обычно рисуются на стороне клиента, джаваскриптом.
    И библиотеки для этого есть - Charts, Highcharts и куча других, более или менее навороченных.
    Эти две я пробовал. Charts позволяет сделать многое и довольно простая.
    А Highcharts - это вообще бомба, там куча настроек и кастомизаций https://www.highcharts.com/demo

    Причем здесь теги laravel и php я вообще не понял...
    Ответ написан
    3 комментария
  • Как кэшировать данные в Yii2?

    densisss
    @densisss
    Веб-разработчик.
    Кэш вы можете использовать любого вида (File, DB, Memcached, Redis...). По умолчанию используется файловый кэш, для DB кэша нужно создавать таблицу в БД.

    Пример кеша в view:
    <?php if ($this->beginCache('_header')): ?>
        <header></header>
    <?php
        $this->endCache();
    endif;
    ?>


    Пример в коде:
    $response = \Yii::$app->cache->getOrSet('categoriesFilterHierarchy', function () { //ищу в кэше переменную с ключом 'categoriesFilterHierarchy', если не нахожу, то обращаюсь в БД и кеширую на 600 секунд 
                $categories = self::find()->orderBy('place ASC')->all();
                return $categories;
            },600);
    Ответ написан
    2 комментария