Задать вопрос
  • Почему не назначаются разрешения на папку в volume-е?

    rqdkmndh
    @rqdkmndh
    Web-разработчик
    Изменение прав доступа к папке в Dockerfile с помощью RUN chmod не действует на тома (volumes), примонтированные при помощи инструкции volumes в docker-compose.yml. Это связано с тем, что тома подключаются после выполнения всех команд указанных в Dockerfile, и их содержимое не изменяется в процессе построения образа, что означает, что фактические данные тома и права доступа управляются внешним хостом.

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

    Если же настройка прав доступа должна выполняться внутри контейнера (например, при инициализации или запуске), вы можете использовать команду entrypoint или command в docker-compose.yml для запуска скрипта, который будет устанавливать нужные права доступа при запуске контейнера каждый раз. Пример такого скрипта:
    # Dockerfile
    ...
    
    # Установка прав доступа в скрипте инициализации
    COPY ./set-permissions.sh /usr/local/bin/set-permissions.sh
    RUN chmod +x /usr/local/bin/set-permissions.sh
    
    # Запуск скрипта при старте контейнера
    ENTRYPOINT ["set-permissions.sh"]
    CMD ["apache2-foreground"]

    bash:
    # set-permissions.sh
    #!/bin/bash
    chmod o+w /app/web/uploads
    chmod o+w /app/web/uploads/result
    exec "$@"

    Этот скрипт изменит права на каталоги при каждом запуске контейнера, не зависимо от прав на машине хоста.
    Ответ написан
    Комментировать
  • Как вставить код в конкретное место страницы Вордпресса?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Нужно смотреть код конкретной темы, но общий принцип такой: в дочерней теме вы либо вешаете событие на нужный вам хук, либо заменяете весь шаблон single.php
    Ответ написан
    5 комментариев
  • Почему не загружаются картинки yii2?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Вы когда этот сайт куда-то выложите, откуда у людей будет браться диск D с вашими картинками?
    В HTML указывается путь к изображению относительно веб-сервера, и этот сервер и должен их отдавать клиентам.
    Ответ написан
    3 комментария
  • Как переместить скопировать удаленный репозиторий в другой удаленный репозиторий?

    vhood
    @vhood
    Не забывайте отмечать решения
    1. Клонируешь проект из исходного репозитория

    git clone <ссылка на старый>

    2. Переходишь в склонированный репозиторий и добавляешь новый удаленный репозиторий

    git remote add copy <ссылка на новый>

    3, Пушишь коммиты в новый репозиторий (выше в команде я назвал его copy)

    git push --all copy
    Ответ написан
    Комментировать
  • Почему не работает LOGIC =>OR в CIBlockSection::GetList?

    initbit
    @initbit Куратор тега 1С-Битрикс
    Безумный план моих идей в руках больных людей
    К сожалению, LOGIC в методе CIBlockSection::GetList нет. Сложная логика есть только в методе GetList класса CIBlockElement.
    Попробуйте SectionTable и query.
    Ответ написан
    1 комментарий
  • Как кучу файлов с дампами таблиц соединить в один?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Эх, молодёжь...
    copy *.sql fulldump.sql
    Ещё во времена MS-DOS можно было
    Ответ написан
    1 комментарий
  • DDOS атака на сайт Wordpress. Как заблокировать WPscan?

    Пока что просто заблокировал Ip, но понимаю, что это бесполезно.
    - разве количество запросов не упало?
    Подскажите, как мне заблокировать этот WP scan?

    Блокировка по агенту, в htaccess
    <If "%{HTTP_USER_AGENT} == 'WPScan'">
        Require all denied
    </If>
    Ответ написан
    Комментировать
  • Как найти, где вызывается метод в PHP?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    1 комментарий
  • Как скрывают файл со стилями css?

    @Refguser
    Решения для бизнеса: корп.сайты, ИМ, боты и пр.
    Это не css-файл, это инлайн-стили.
    Ответ написан
    Комментировать
  • Как правильно пройтись циклом внутри другого?

    vhood
    @vhood
    Не забывайте отмечать решения
    Одиакового ничего, идея скорее всего выводить по идексу в массиве

    Значит нужно по индексу и связывать
    <?php foreach ($arItem['PROPERTIES']['IMG_BEFORE']['VALUE'] as $index => $arImgBeforeSrc): ?>
        <?php $arImgAfterSrc = $arItem['PROPERTIES']['IMG_AFTER']['VALUE'][$index] ?>
        <div class="cocoen">
          <img data-src="" class="blog-list__item-image<?=($arParams['ROUNDED_IMAGE'] ? ' rounded' : '');?>" src="<?=CFile::getPath($arImgBeforeSrc);?>" alt="">
          <img data-src="" class="blog-list__item-image<?=($arParams['ROUNDED_IMAGE'] ? ' rounded' : '');?>" src="<?=CFile::getPath($arImgAfterSrc);?>" alt="">
        </div>
    <?php endforeach ?>

    Только в коде не учтен момент, когда изображение "после" может отсутствовать. Во избежание ошибки, вторую картинку лучше в условии выводить и в объявлении переменной $arImgAfterSrc проверку сделать.
    Ответ написан
    Комментировать
  • Как лучше инициализировать объект?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    типа, антипаттерн...

    но это все равно вызов метода в конструкторе, что не приветствуется.

    Бред. Вот кем не приветствуется - вот он пускай и не приветствует и тихо миро плавает в своем болотце. Спокойно вызывайте приватный инициализатор в конструкторе - это как раз нормально. Конструктор - это и есть инициализатор объекта. Он даже называется "конструктор" - сборщик объекта. Его для этого и придумали. Выносить часть инициализации из инициализатора - на самом неделе не самая умная идея. А вот разбить инициализацию на разные логические части и разнести в разные методы - как раз таки очень даже хорошая практика. Декомпозиция, небольшие и простые функции/процедуры и все такое прочее.
    Ответ написан
    2 комментария
  • Почему return не возвращает значение?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    let makeItDouble = (text) => {
      let i = text + text;
      return i;
    };
    
    console.log(makeItDouble("I never look back"));
    Return всё прекрасно возвращает. Но то, что он возвращает, нужно сохранять в переменную или использовать сразу. Переменная i находится внутри функции и снаружи недоступна. Если бы можно было делать так, как вы написали, то и смысла в return бы не было.
    Ответ написан
    Комментировать
  • Как из объекта Bitrix\Crm\ItemIdentifier вытащить нужные данные?

    IvanU7n
    @IvanU7n
    nothing interesting here
    они приватные, достать их снаружи простыми способами нельзя
    но у этого объекта есть методы доступа, типа getEntityTypeId(), getEntityId() и т.п.
    Ответ написан
    Комментировать
  • Почему у задачи такое решение?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    А как вы код написали, если не можете понять, как он работает?

    Вы открывали документацию функции, читали, что она делает и какие аргументы принимает?
    Ну, давайте я вам её сюда скопирую:
    Parameters
    indexStart
    The index of the first character to include in the returned substring.
    indexEnd Optional
    The index of the first character to exclude from the returned substring.
    Description
    If indexStart < 0, the index is counted from the end of the string. More formally, in this case, the substring starts at max(indexStart + str.length, 0).
    If indexEnd < 0, the index is counted from the end of the string. More formally, in this case, the substring ends at max(indexEnd + str.length, 0).


    зачем нужен (-2, -1)
    Для выполнения вот этого условия задачи: "если слово заканчивается на мягкий знак, то получите предпоследнюю букву". Я искренне не понимаю, что тут можно добавить...
    Ответ написан
  • Ошибка отправки электронной почты. Linux. Sendemail.?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Да, всё так. В ошибке на нижней строчке всё подробно описано.
    Ответ написан
    3 комментария
  • Как это работает?

    Функция работает корректно только для числа 10.
    Во второй и четвертой строке замени 10 на num.
    Не забывай про тесты!)
    Ответ написан
    Комментировать
  • Почему при подключении скрипта в теге head возникает ошибка?

    vhood
    @vhood
    Не забывайте отмечать решения
    Разберем вопрос:

    он уже есть в самом html документе
    браузер разбирает HTML документ постепенно

    js должен видеть
    это в каком контракте написано?

    почему если скрипт подключить в теге head то получим ошибку, а если внизу body то всё нормально
    потому что скрипт блокирующий и браузер выполняет его до того, как появляется H1

    Варианты решения:
    1. Оставить скрипты внизу body, что-бы выполнялись после загрузки вышестоящих тегов
    2. Атрибутом defer указать браузеру, что выполнять скрипт нужно после построения DOM дерева
    3. Прослушивать события страницы на стороне JS, работать с тегами только после построения DOM дерева
    Ответ написан
    Комментировать
  • Как правильно: setTime или new Date?

    tolmasoft
    @tolmasoft Автор вопроса
    Программист, сервис-инженер
    Отвечая на свой же вопрос по производительности - setTime работает на треть быстрее
    Ответ написан
    Комментировать
  • Как исправить ошибку, c обновлением JSON запроса?

    @TimsTims
    Ошибка заключается в том, что браузер , выполняя инструкции веб сервера (в F12 посмотрите что вам приходит в заголовке "cache") закешировал ваш json. Вариантов решения несколько:
    1) самый правильный - докрутить настройки веб сервера, чтобы он на файлы с типом json выдавал заголовок cache: nocache
    2) костыльный вариант - в своем js скрипте когда обращаетесь к json, приписывайте ещё через знако вопроса метку времени. Браузер будет думать, что это что-то новое, в Кеше этих данных ещё нет, и отправит новый запрос.
    То есть вместо
    Fetch ("....json")
    Пишите
    Fetch ("....json? timestamp")
    Ответ написан
    1 комментарий