• Как выйти из двух пользователей в Linux, и при этом выполнить команду один раз?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    И не будет, ведь такая команда будет исполняться в одном shell, а не в двух разных. После первого exit дальше уже всё, остаток будет проигнорирован.

    Способы есть:

    1. Из суперпользователя убить shell пользователя. Некрасиво и неудобно, но закроет оба шелла.

    2. Переключение в суперпользователя оформить сразу с выходом, тогда выход из внутреннего сделает выход и из внешнего, например:

    sudo -i; exit

    Недостаток - если не удастся правильно ввести пароль - сразу же и выкинет. Ну, можно поразбираться с кодами возврата, чтобы не делать exit.

    3. Вместо предыдущего можно сделать exec, тогда запускаемая команда заместит текущий shell, а не будет запущена как дочерний процесс:

    exec sudo -i

    Недостаток тот же - если не ввести правильно пароль, то выкинет.

    Но в целом я не вижу во всём этом смысла. Выход можно делать комбинацией Ctrl-D. Нажать дважды Ctrl-D ничто не мешает, это даже удобнее.
    Ответ написан
    2 комментария
  • Как выйти из двух пользователей в Linux, и при этом выполнить команду один раз?

    karabanov
    @karabanov Куратор тега Linux
    Системный администратор
    Ctrl+d
    Ctrl+d

    Ну или по хардкору (убить ssh сессию):
    Enter
    ~
    .
    Ответ написан
    Комментировать
  • Как исправить ошибку при переходе на php 8.2 Битрикс?

    Любые подобные ошибки совместимости в ядре решаются только обновлением Битрикса.

    Ну а так, для общего развития: там явно баг и передаётся не та переменная:
    - $context = stream_context_create($query);
    + $context = stream_context_create($query_options);
    Ответ написан
  • Как намекнуть начальству, что agile не избавляет от тз?

    vabka
    @vabka
    Токсичный шарпист
    1. Agile - это про то что люди должны договариваться. По тому надо не намёки делать, а говорить прямо и предметно.

    2. Вот вы говорите, что вам нужно ТЗ. А зачем вам оно нужно?
    Вам не понятна та постановка, которая описывается в карточках?
    Есть неоднозначность?
    Уже есть примеры, когда от этой неоднозначности пострадал продукт (например из-за необходимости переделывать)?

    Или вам нужно не ТЗ, а виденье того, чем в итоге должен стать продукт?
    Не понятно, для чего вообще все эти карточки перекладываются?
    Если так, то, вероятно, вам нужно не ТЗ, а какие-то OKR-ы, чтобы можно было от них отталкиваться при составлении задач.

    Возможно, произошла мискоммуникация между вами и заказчиком. Возможно, заказчик действительно ожидает от вас (команды) самостоятельности при составлении задач - по сути сочетание в себе и менеджера и аналитика.
    Это нормально, но нужно этот момент тоже прояснить.
    Ответ написан
    6 комментариев
  • Как сделать несколько вложенных джоинов?

    @alexalexes
    Сначала напишите чистый SQL:
    select n.*, -- атрибуты новости
               p1.*, -- атрибуты автора
               p2.*, -- атрибуты исполнителя
               s.* -- атрибуты статуса новости
    from news n
    join status s on s.statusId = n.statusId
    left join people p1 on p1.peopleId = n.authorId
    left join people p2 on p2.peopleId = n.executorId
    where p1.fullName like :search
           or p2.fullName like :search

    Потом откройте документацию по ORM и перепишите в методологии ORM.
    Сначала попробуйте простой запрос:
    select *
    from news

    Потом посмотрите, как делать join и работать с псевдонимами таблиц:
    select n.*, -- атрибуты новости
               s.* -- атрибуты статуса новости
    from news n
    join status s on s.statusId = n.statusId

    Потом как с where работать:
    select n.*, -- атрибуты новости
               s.* -- атрибуты статуса новости
    from news n
    join status s on s.statusId = n.statusId
    where s.statusId = :statusId

    Потом, как лайкать:
    select n.*, -- атрибуты новости
               p1.*, -- атрибуты автора
               p2.*, -- атрибуты исполнителя
               s.* -- атрибуты статуса новости
    from news n
    join status s on s.statusId = n.statusId
    left join people p1 on p1.peopleId = n.authorId
    where p1.fullName like :search

    И в заключение, как к лайкам добавить OR (самый первый запрос).
    Ответ написан
    Комментировать
  • Вывод записей не по id, а по колонке slug?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Перенаправить все запросы на единую точку входа

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]


    В точке входа реализовать роутер (все равно надо, вы же CMS учитаесь писать).
    Роутер в простейшем виде читает $_SERVER['REQUEST_URI'], анализирует его, и передает управление на нужный файл.

    Например, ваш url /blog/post-url
    $uri = trim($_SERVER['REQUEST_URI'], '/'); // обрезать концевые слеши
    $segments = explode('/', $uri); // Разбить в массив по слешам
    // и простейший роутинг
    switch ($segments[0]??null) {
      case 'blog': 
        $slug = $segments[1];
        include 'blog.php';
        break;
      default:
        echo 'Homepage';
    }


    В blog.php (псевдокод)

    $post = query('SELECT * FROM posts WHERE slug = :slug', ['slug' => $slug]);
    if (!$post) {
      echo '404';
      die;
    }
    echo $post->title;
    echo $post->content;
    Ответ написан
    Комментировать
  • Как правильно загружать картинки?

    @alexalexes
    Я нажимаю добавить картинку, она уходит на сервер, там ей присваивается новое уникальное имя,

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

    Ge1i0N
    @Ge1i0N
    Переношу из комментариев в ответ:

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

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Не нужно никаких приветствий в sshrc!
    Для этого есть bashrc.
    Ответ написан
    3 комментария
  • Как получить ближайшие вложенные страницы?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    'numberposts' => -1 рекурсивно получает все дочерние страницы указанного родителя, если его не указывать, то вернуться лишь те дочерние страницы, у которых parent_id == id родителя:
    <?php
    $id = 1;
    
    $config = [
      'parent' => $id,
      'post_type' => 'page',
      // 'numberposts' => -1,
      'post_status' => 'publish',
    ];
    
    $child = get_pages($config);
    
    if($child) {
      foreach($child as $page) {
        echo $page->ID;
      }
    } else {
      echo 'У этой страницы нет дочерних страниц.';
    }
    Ответ написан
    Комментировать
  • Как решить логическую задачу по js?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    И что тут не понятного?
    Заводим счетчик, начальное значение 0.
    На входе последовательность скобок, по которой нужно пройтись, встречаем ( - делаем +1 к счетчику, встречаем ) - делаем -1.
    Переменная, цикл, switch case - все что нужно.
    Ответ написан
    1 комментарий
  • Код для подбора всех комбинаций?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Тривиально. Перебор всех комбинаций длиной M из N символов это перебор всех чисел от 0 до M^N-1, записанных в N-ричной системе. Достаточно написать функцию, которая к числу в N-ричной системе прибавляет единицу.
    Ответ написан
    Комментировать
  • Как создать раздел элемента при регистрации пользователя битрикс?

    @konsealex
    Попробуйте добавить ключевое слово "static" методу OnAfterUserAddHandler
    Ответ написан
    3 комментария
  • Как обработать массив переменной длины?

    IvanU7n
    @IvanU7n
    const data = [ /* ... */ ];
    let offset = 0;
    while (offset < data.length) {
    	data[offset + 0];
    	data[offset + 1];
    	// ...
    	data[offset + 7];
    	offset += 8
    }
    Ответ написан
    4 комментария
  • Как организовать коммиты при верстке сайта?

    @maximq
    QA Engineer
    одна функция - один коммит одного/нескольких файлов, делается для того, чтобы вы могли с лёгкостью откатиться до исходной версии в любой момент, исключив ненужный код.
    Ответ написан
    Комментировать
  • Как отфильтровать многомерный массив при помощи значений в одномерном массиве?

    @alexalexes
    $filtered_arr = array_filter($arr, function ($el) use ($arr2) { 
                return !in_array($el['number'], $arr2);
            }
        });

    В фильтрующей функции на return вы подаете выражение, которое можно перевести или трактовать как булевый результат true/false, по которому вы должны оставить поданный внутрь функции элемент $el в $filtered_arr.
    PS: Будьте осторожны с in_array - эта функция чувствительна к типу данных элемента и элементов массива, она их сравнивает как ===. Это на случай, если у вам в сравнении будут якобы числа, например, вместо 1010 будет '1010'.
    Ответ написан
    5 комментариев
  • Как отфильтровать многомерный массив при помощи значений в одномерном массиве?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Да, возможно. array_filter со своей callback-функцией.
    Ответ написан
    3 комментария
  • Как посчитать количество записей по условию?

    @maksam07
    SELECT type, COUNT(*) 
    FROM ваша_таблица 
    GROUP BY type;
    Ответ написан
    Комментировать