• Почему не срабатывает правило nginx?

    @dodo512
    try_files $uri $uri/ /index.html$is_args$args;

    Поменять на
    try_files $uri $uri/ /index.html =404;
    Ответ написан
    3 комментария
  • Почему не работают исходящие вызовы Asterisk?

    @Janus74
    Если сменился IP адрес, то вполне возможно, ваш оператор блокирует исходящие звонки. Нужно связаться с ТП оператора, и уточнить у них этот момент.
    Ответ написан
    1 комментарий
  • Как сделать туннель через машину?

    @forspamonly2
    чтобы туннель был в нужную вам сторону, порт в putty должен быть local.
    Ответ написан
    5 комментариев
  • Как отправить смс через wget или curl?

    @evgensoft
    Пользуюсь sms.ru - простая интеграция, неплохие цены, на свой номер вообще бесплатно
    Ответ написан
    1 комментарий
  • Как найти дубликаты IP адресов?

    @AlexeyVD
    Для поиска и вывода дубликатов можете попробовать следующее:
    SELECT *
      FROM members m
      JOIN (SELECT *
              FROM members
              WHERE logins_by_ip > 1
              GROUP BY ip_address
              HAVING COUNT(1) > 1) AS sel ON m.member_id = sel.member_id
      ORDER BY m.ip_address

    Тут мы в подзапросе ищем ip, которые дублируются в нескольких учетках, а затем выводим эти учетки, отсортировав по ip.
    Для поиска по отличающимся октетам группируйте и сортируйте по:
    SUBSTRING_INDEX(ip_address, '.', 2)
    или
    SUBSTRING_INDEX(ip_address, '.', 3)
    Ответ написан
    3 комментария
  • Как реализовать множество условий?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Итак... возьмем ваш код

    if (!preg_match("/^[a-zA-Z0-9_]+$/", $username)) die("Bad login");
            if (
            $type != 'voice' and $type != 'balance1' and $type != 'balance2' and $type != 'absvoice' and $type != 'passhash' and
            $type != 'paytime' and $type != 'white1' and $type != 'exp1' and $type != 'white2' and $type != 'voice2' and
            $type != 'exp2') die("Wrong type");
            if ($action != 'set' and $action != 'get' and $action != 'add') die("Wrong action");
            if ($action == 'set' and !(preg_match("/^[0-9-.]+$/", $value)) and $type != 'passhash') die("Wrong value");
            if (($action == 'set' or $action == 'add') and ($type == 'paytime' OR $type == 'absvoice')) die("paytime/absvoice read only");
            if (($action == 'add') and ($type == 'passhash' or $type == 'white1' or $type == 'white2')) die("add not available for this");


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

    if (!preg_match("/^[a-zA-Z0-9_]+$/", $username)) die("Bad login");
    
    $availableTypes = ['voice', 'balance1', 'balance2', 'absvoice', 'passhash', 'paytime', 'white1', 'exp1', 'white2', 'voice2', 'exp2'];
    if (!in_array($type, $availableTypes)) {
        die("Wrong type");
    }
    
    if (!in_array($action, ['set', 'get', 'add'])) {
        die("Wrong action");
    }
    if ($action == 'set' and !(preg_match("/^[0-9-.]+$/", $value)) and $type != 'passhash') {
        die("Wrong value");
    }
    if (($action == 'set' or $action == 'add') and in_array($type, ['paytime', 'absvoice'])) {
        die("paytime/absvoice read only");
    }
    if (($action == 'add') and (in_array($type, ['passhash', 'white1', 'white2']))) {
        die("add not available for this");
    }


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

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

    updated: избавляемся от всех ифов (точнее заменяем на один)
    $constraints = [
        'unsupportedTypes' => !in_array($type, $availableTypes),
        'unsupportedAction' => !in_array($action, ['set', 'get', 'add']),
        'expectedNumericValue' => $action == 'set' && is_numeric($value),
        'readOnlyType' => 'get' !== $action && in_array($type, ['paytime', 'absvoice']),
        'disallowedTypes' => 'add' === $action && in_array($type, ['passhash', 'white1', 'white2']),
    ];
    
    $constraintsMessages = [
        'unsupportedTypes' => 'Type "<type>" is not supported',
        'unsupportedAction' => 'Action "<action>" is not supported',
        'expectedNumericValue' => 'Wrong value, expected numeric',
        'readOnlyType' => '<type> is read only',
        'disallowedTypes' => 'Type "<type>" is not supported for action "<action>"'
    ];
    
    $errors = array_keys(array_filter($constraints));
    if (!empty($errors)) {
    
        die(str_replace(
            ['<type>', '<action>'],
            [$type, $action],
            $constraintsMessages[reset($errors)]
        ));
    }


    это дело можно еще упростить и соорудить нормальные правила валидации + отдельную функцию которая будет проверять все это дело.
    Ответ написан
    2 комментария
  • Как можно отслеживать изменения только определенных файлов на github?

    sharlatan
    @sharlatan
    IT engineer, warehouse operative
    Привет,

    1.0 Командно-локальный
    Если репозиторий склонирован на локальную машину, то посмотреть коммиты для файла | дирректории:
    $: gitk [filename]
    # графический способ
    
    $: git log [filename]
    # консольный


    1.2 Удаленный через GitHub
    Через браузер посмотреть все изменения для файла | дирректория напрямую:
    http://github.com/USERNAME/PROJECT/commits/BRANCH/PATH-TO-FILE-DIR

    USERNAME имя создателя рпозитория
    PROJECT имя репозитория
    BRANCH может быть 'master' или другая ветка
    BRANCH/PATH-TO-FILE-DIR думаю и так ясно

    2.0 Ссылки-источники
    [2.1] View the change history of a file using Git versioning
    [2.2] Inspecting a repository
    [2.3] man git log - в своем терминале git-log - Show commit logs
    [2.4]Can GitHub show the history of changes made to one...
    Ответ написан
    6 комментариев
  • Какие шутки/приколы на 1 апреля можно сделать для сайта?

    @Chekhoved
    Накрасьте ему спину (background) мелом, свяжите шнурки (footer с header) и положите кнопку (audio) на стул.
    Ответ написан
    Комментировать