Задать вопрос
  • Как в php при помощи SimpleXml добавить атрибуты?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    <?php
    $xml = new SimpleXmlElement(<<<XML
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE yml_catalog SYSTEM "shops.dtd">
    <yml_catalog>
    </yml_catalog>
    XML
    );
    $xml->addAttribute('date', (new DateTimeImmutable())->format('Y-m-d H:i'));
    print $xml->asXML();
    // <?xml version="1.0" encoding="utf-8"?>
    // <!DOCTYPE yml_catalog SYSTEM "shops.dtd">
    // <yml_catalog date="2024-01-24 16:42">
    // </yml_catalog>
    Ответ написан
    Комментировать
  • VS Code творит лютую дичь при компиляции и отладке?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Это называется "оптимизируюший компилятор". Он может выкинуть какие-то строчки, часть кода переписать и перетасовать. Соптимизировать по своему усмотрению. Поэтому для отладки используют специальные debug сборки. Установите компилятору флаг -O0, чтобы отлкючить оптимизацию.

    В закоменченную фунцию он может заходить, если вы не перекомпилировали перед запуском.
    Ответ написан
    7 комментариев
  • Почему на хостинге у многих есть папка public_html и почему она так называется?

    martin74ua
    @martin74ua Куратор тега Linux
    Linux administrator
    Раньше, когда трава была зеленее, интернет меньше и добрее, существовало вот такое в настройках веб сервера:

    # UserDir: The name of the directory that is appended onto a user's home
    # directory if a ~user request is received.
    #
    # The path to the end user account 'public_html' directory must be
    # accessible to the webserver userid. This usually means that ~userid
    # must have permissions of 711, ~userid/public_html must have permissions
    # of 755, and documents contained therein must be world-readable.
    # Otherwise, the client will only receive a "403 Forbidden" message.
    #
    # See also: httpd.apache.org/docs/misc/FAQ.html#forbidden
    #


    Т.е. можно было просто получить логин на сервер, где был запущен веб сервер и получить домашнюю страничку вида:
    example.com/~username

    И вот с тех древних времен так и потянулось... Каталог, в котором размещаются файлы сайта - public_html....
    Ответ написан
    4 комментария
  • Как исправить несоответствие версии сортировки?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Специальный варнинг, очень явно подсказывающий, что держать физическую репликацию на разных ОС - идея плохая. Причина в время от времени происходящих изменении правил сортировки строк: https://wiki.postgresql.org/wiki/Locale_data_changes
    СУБД это задевает в части индексов, если на мастере было '1-1' < '11', то запись запишется в одно место btree, а если на реплике оператор сравнения говорит что '1-1' > '11', то выполнение запроса смотрит в логичное для этого результата место индекса и вообще не находит данные. Потому что мастер их записал располагая другим ответом функции сравнения строк.
    Так и проявляется IRL, поиск по индексу говорит что данных нет, но если форсировать seqscan - то данные находятся.

    Варнинг на мой взгляд действительно избыточно говорливый, сыпется при каждом подключении к базе, но какой есть. Обновляйте ОС, в общем, на одинаковую в рамках всего кластера. Затем перестраивайте пострадавшие индексы.
    Ответ написан
    Комментировать
  • Получить часть ссылки до последнего слеша php?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    простая работа со строковыми функциями.
    1. Найти позицию последнего слэша
    2. Вырезать часть строки от начала до найденной позиции
    Ответ написан
    3 комментария
  • Почему не работает maring и padding?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    У inline элементов не может быть вертикальных внешних отступов (margin).
    Внутренние отступы (padding) работают.
    Сделайте элемент блочным block, flex, inline-block и т.п.
    Ответ написан
    Комментировать
  • Как вывести разные названия раздела в меню и в заголовке в 1С Битрикс?

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

    @RusaDrako
    При формировании данных сначала построй массив дат за период (пустые), а потом заполни его данными (которые есть).

    // Получаем массив $res
    // Формируем массив дат
    $list = [];
    $minDate = strtotime('-7 days');
    $maxDate = strtotime(date());
    for($date = $minDate; $date <= $maxDate; $date += 24*60*60) {
    	$list[date('Y-m-d', $date)] = 0;
    }
    // Заполняем данными
    foreach ($res as $row) {
    	$list[date('d.m.Y', strtotime($row['stat_day']))] = $row['count'];
    }
    $list_date[] = array_keys($list);
    $list_count[] = array_values($list);
    Ответ написан
    2 комментария
  • Как отследить падение Апача и перезапустить его?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Файл /usr/lib/systemd/system/httpd.service: Restart=on-failure
    И конечно разумеется: systemctl daemon-reload
    Ответ написан
    3 комментария
  • Как выйти из двух пользователей в 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 не избавляет от тз?

    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 кликнуть в какой-нибудь раздел селектора чтобы не слетели старые привязки и перепроверить что там точно нет выделенных разделов.
    Ответ написан
    Комментировать