• Существуют ли внешние защитные наушники для опенспейса подходящие очкарикам?

    tkutru
    @tkutru
    A programming cat.
    Егор Петров я работаю в берушах, возможно вы просто не подобрали себе нужные, их много всяких.
    Что до внешних наушников, то вам нужны не с активным шумоподавлением (походят для подавления монотонного гула, но не офисного шума), а с хорошей ШУМОИЗОЛЯЦИЕЙ.
    Ответ написан
  • Выбор back-end языка для веба?

    tkutru
    @tkutru
    A programming cat.
    Если хотите быстро "включиться" и начать ваять* - php.
    Если у вас есть время систематически изучать язык и писать приложения без спешки - java.

    *при этом php в 2017 совсем не такой простой, как в 2004. Это не язык для домохозяек, и как правило уходят годы, прежде чем хорошо овладеть им.
    Ответ написан
    1 комментарий
  • Yii2 3 таблицы и 2 ActiveRecord?

    tkutru
    @tkutru
    A programming cat.
    Насколько понял из вопроса, у вас связь многие-ко-многим.
    Если так, viaTable в помощь
    www.yiiframework.com/doc-2.0/yii-db-activequery.ht...
    Ответ написан
  • Почему не работает замена?

    tkutru
    @tkutru
    A programming cat.
    А ларчик просто открывался!
    echo preg_replace('/(\b)'.$search.'(\b)/ui','$1' . $replace .'$2', $string);

    Все дело в модификаторе u
    php.net/manual/ru/reference.pcre.pattern.modifiers.php см. PCRE_UTF8
    Ответ написан
    Комментировать
  • Почему strcasecmp не сравнивает строки с разным регистром?

    tkutru
    @tkutru
    A programming cat.
    Скорее всего проблема в мультибайтовой кодировке (юникод).
    Попробуйте для регистронезависимого сравнения строк использовать мультибайтовую версию функции strcasecmp
    function mb_strcasecmp($str1, $str2, $encoding = null) {
        if (null === $encoding) { $encoding = mb_internal_encoding(); }
        return strcmp(mb_strtoupper($str1, $encoding), mb_strtoupper($str2, $encoding));
    }

    Отсюда php.net/manual/en/function.strcasecmp.php#107016
    Ответ написан
    2 комментария
  • MySQLi: зачем нужна проверка соединения connect_errno?

    tkutru
    @tkutru
    A programming cat.
    Проверка на то, что подключение вообще возможно. Она сработает, если вы отключите сервис mysql и попытаетесь выполнить свой скрипт.

    Error : mysqli::mysqli(): (28000/1045): Access denied for user 'user'@'localhost' (using password: YES)

    Т.е. сервис работает, просто юзер неверный.
    Ответ написан
    Комментировать
  • Как узнать timestamp полуночи после смены часового пояса?

    tkutru
    @tkutru
    A programming cat.
    <?php
    $tzMsk = new DateTimeZone('Europe/Moscow');
    $tzSmr = new DateTimeZone('Europe/Samara');
    
    $date1 = (new \DateTime())
    ->setTimestamp(1485943200)
    ->setTimezone($tzMsk);
    
    $date2 = (new \DateTime())
    ->setTimestamp(1485943200)
    ->setTimezone($tzSmr);
    
    var_dump([
        'date1' => $date1->format('Y-m-d H:i:s'),
        'date1mid' => $date1->setTime(0, 0, 0)->format('Y-m-d H:i:s'),
        'date1midtimestamp' => $date1->setTime(0, 0, 0)->getTimestamp(),
        'date2' => $date2->format('Y-m-d H:i:s'),
        'date2mid' => $date2->setTime(0, 0, 0)->format('Y-m-d H:i:s'),
        'date2midtimestamp' => $date2->setTime(0, 0, 0)->getTimestamp(),
    ]);
    ?>
    Ответ написан
  • Загрузка файла и ActiveRecord - как? А именно, как сначала сделать saveAs файла, затем model->save?

    tkutru
    @tkutru
    A programming cat.
    Есть три основных варианта.
    1. Правильный: Соблюдать принцип единственной ответственности.
    Т.е. если есть какая-то модель и к ней можно дополнительно прикреплять картинки, то заведите отдельный класс для формы загрузки, в ее свойствах можно отдельно указать набор свойств для модели и отдельно - загружаемые файлы.
    Собственно в правилах валидации формы проверять файлы на соответствие форматам. При сохранении формы отдельно валидируйте-сохраняйте файл(ы), и отдельно - модель.
    www.yiiframework.com/doc-2.0/guide-input-file-uplo...
    Если файлы станут самостоятельной сущностью - заведите для них отдельную AR модель.

    2. Менее правильный: исправить ошибку в текущем решении.
    Проблема в том, что ваш метод uploadMyFiles вызывается до валидатора. Соответственно, можете вызывать его не в контроллере, а в методе модели afterValidate (он будет вызываться перед сохранением модели и после прохождения всех валидаций).

    3. Прочие способы (наименее предпочтительно).
    В валидаторе file можно задать сценарий при котором он (не) будет отрабатывать, после загрузки - менять сценарий на тот, при котором валидатор не работает. Другой вариант - использовать готовые решения. Еще один вариант - заменить валидатор на кастомный, который будет проверять файл на соответствие форматам и вызывать последующую загрузку.
    Ответ написан
  • Где можно почитать, про номера устройств в линукс, или что это такое?

    tkutru
    @tkutru
    A programming cat.
    Александр Семененко, называется старший и младший номера устройств, нужно для ассоциации драйверов с устройствами. Делаем man ls, смотрим описание флагов:

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

    Типы файлов могут принимать следующие значения: - для обычного файла, d для каталога, b для блочного
    устройства, c для символьного устройства, l для символической ссылки, p для FIFO и s для гнезда
    (socket).

    По умолчанию, временной штамп является временем последней модификации; опции -c и -u позволяют
    выбрать два других временных штампа. Для файлов устройств, поле размера обычно заменяется на
    старший и младший номера устройства
    .


    Далее несложно гуглится
    rus-linux.net/kos.php?name=/book1/gl-09/gl_09_02.html
    dmilvdv.narod.ru/Translate/LDD3/ldd_major_minor_nu...
    Ответ написан
    Комментировать
  • Yii2 REST: Как правильно обработать post-запрос, в котором передается json-коллекция?

    tkutru
    @tkutru
    A programming cat.
    Получаете post данные, декодируете их в массив, траверсите массив и грузите данные в модели и сохраняете их. Допустим вы передаете данные в post параметре arr а модель у вас называется Model
    $data = json_decode(\Yii::$app->request->post('arr'), true);
    foreach ($data as $chunk) {
        $model = new Model();
        $model->attributes = $chunk;
        $model->save();
    }

    Чтобы модель корректно сохранилась в бд нужно чтобы ее свойства удовлетворяли ее правилам валидации (см. метод rules в классе модели). Если не сохраняется в бд, можно проверять на ошибки, например вместо обычного сохранения прописывать
    if (!$model->save()) {
        var_dump(['erorrs' => $model->errors]);
    }

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