Задать вопрос
  • Как сжать в зип архив сайт?

    @alexalexes
    Потому, что у вас в коде происходит обход только по текущему уровню каталога $dir.
    Чтобы обход заныривал глубже, нужно создать рекурсивную функцию.
    Телом рекурсивной функции у вас будет:
    if ($dh = opendir($dir))
    {
    // код, который у вас в вопросе
    }

    А точка вызова для смены подкаталога:
    if (is_file($dir.$file)) {
    // код из вопроса
                }
    else if(is_dir($dir.$file))
    {
       $zip->addEmptyDir($dir.$file);
       // тут должен быть вызов рекурсивной функции, по которой вы передаете контекст $zip и $dir.$file (наверное, передача по ссылке)
    }

    В этом случае у вас будет рекурсивный обход каталогов в глубину.
    PS: Проконтролируйте дескриптор $zip на больших вложенностях и большим содержании файлов, нет ли переполнения выделенной оперативной памяти. Еще стек вызовов функций не бесконечный, тоже проконтролируйте глубину вызова.
    PPS: Бэкапить сайты в архив делается одной строчкой линуксовой командой, и засовывается в crontab. Будет работать надежнее. Эта не задачка для php-разработчика.
    То, что вы делаете - это просто тренировка на кошках, как работать с ZipArchive в PHP.
    Ответ написан
    4 комментария
  • Как картинку сделать кнопкой?

    delphinpro
    @delphinpro Куратор тега HTML
    frontend developer
    Потому что у вас скрипт обработки вкладок кривой.
    Можно поправить скрипт, или хакнуть немножко вот так:

    <button type="button" class="btnNavigation btnActive" data-tab="button_1">
          <img src="../img/image.png" alt="" srcset="" style="pointer-events: none;">
        </button>
    Ответ написан
    Комментировать
  • Почему проблема с localStorage?

    Elaryks
    @Elaryks
    removeItem() удаляет элемент по ключу, а не по значению. В этот метод передаётся только один аргумент. Вам же нужно изменить массив и сохранить его обратно:
    function dele() {
        let x = prompt("Какую");
        let films = JSON.parse(localStorage.getItem("film")) || [];
    
        films = films.filter(elem => elem !== x);
    
        localStorage.setItem("film", JSON.stringify(films));
        rend();
    }

    Кроме того, при добавлении элемента вы не проверяете, существует ли массив перед добавлением в него элемента:
    function add() {
        let x = prompt("Название");
        let films = JSON.parse(localStorage.getItem("film")) || [];
    
        films.push(x);
        localStorage.setItem("film", JSON.stringify(films));
        rend();
    }
    Ответ написан
    Комментировать
  • Есть что то проще чем php?

    Fragster
    @Fragster
    помогло? отметь решением!
    Если обычная статика html то можно собирать с помощью gulp/webpack/rollup из кусков и получать статический сайт. Если не нужно сильно со стилями бороться и это что-то типа сборника документации - то вообще что-то типа https://vuepress.vuejs.org/ можно использовать.
    Потом просто набор статических файлов класть на хостинг и всё.

    Хотя что подразумевается под "настраивать php на сервере" не очень понятно.
    Ответ написан
    3 комментария
  • Что это за блокировка почтового ящика gmail?

    Необычная высокая нагрузка
    Причина временной блокировки от нескольких часов до суток. Причины возможные перечислены. Текст стандартный без подробностей ждём сутки и проверяем
    Ответ написан
    Комментировать
  • Как через кнопку удалить localstorage в конкретной строке?

    @Flawles7
    найти нужный индекс объекта например через findIndex и удалить его к примеру через splice
    const filmsArray = JSON.parse(localStorage.get('film'))
    const removeIndex = filmsArray.findIndex(item => item.title === 'название фильма') 
    filmsArray.splice(removeIndex, 1)
    localStorage.set('film', filmsArray)
    Ответ написан
    Комментировать
  • Почему phpstorm не видит классы битрикс при подключенном composer?

    @russeljo Автор вопроса
    Всё оказалось довольно просто. Нужно папку bitrix/modules пометить как Sources Root
    Ответ написан
    Комментировать
  • Почему в Nginx не работают переменные для try_files?

    @dodo512
    Когда истинно уловие if исполняется только содержимое блока if.
    И то что унаследовано от основной конфигурации, например, add_header.
    А вот try_files не наследуется и исполняется только когда уловие if ложно.

    Эти проблемы возникают только в контексте location.
    При использовании if в контексте server таких проблем нет.
    Достаточно перенести if на уровень server и всё заработает как ожидалось.
    server {
      set $avif_image_path "";
      if ($http_accept ~* "image/avif") {
        set $avif_image_path "$uri.avif";
      }
    
      set $webp_image_path "";
      if ($http_accept ~* "image/webp") {
        set $webp_image_path "$uri.webp";
      }
    
      location ~* \.(png|jpe?g|gif)$  {
        add_header Vary Accept;
    
        try_files $avif_image_path $webp_image_path $uri =404;
      }


    Или как советовали в комментариях избавиться от if и переписать на map.
    Ответ написан
    2 комментария
  • Почему 2 ветки Git не сливаются?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Вы же сами увидели в vscode — что произошло. Вы забыли обновить ветку и начали строить вторую цепочку коммитов. Ваша ветка раздвоилась (diverged).

    Гит вам тоже всё подробно пояснил, что нельзя пушить в другую ветку и предлагает вам сначала объединить разные ветки в одну используя pull.

    Но тут вылезла другая проблема, что у вас немного недонастроен гит. В новых версиях он просит вас уточнить, каким методом вы хотите объединять ветки? Можно путем создания коммита слияния, а можно путем пересаживания вашей текущей ветки main на вершину вышестоящей ветки origin/main, чтобы история осталась простой и линейной, без этих разветвлений и слияний.

    Первая стратегия задается командой
    git config pull.rebase false # merge
    И это поведение по-умолчанию которое было раньше. Рекоменду вам его и выбрать. Эта команда выполняется один раз и больше вам не потребуется.

    А затем просто повторите git pull и всё сработает. Разве что могут возникнуть конфликт, но это уже другая тема.

    Если хотите сохранить линейную историю то можно принудительно вызвать вторую стратегию только для одного раза
    git pull --rebase
    Ответ написан
    3 комментария
  • Главная страница WordPress не обновляется после включения LiteSpeed Cache. Какие могут быть причины?

    @Refguser
    Решения для бизнеса: от создания ИМ до...
    Правильно как-то так:
    1. Удалить и не использовать LiteSpeed Cache если у тебя не LS-сервер, интересует нормальная работа сайта, а не обмануть ПС.
    2. Разобраться что такое кеш, какие виды бывают вообще и какие есть в ВП. После этого, если понадобится подобрать подходящий для твоего случая плагин и настроить его.
    Ответ написан
    Комментировать
  • Почему value выводятся в консоль в обратном порядке?

    @historydev Куратор тега JavaScript
    Mistkerl, drück den Knopf.
    Рекурсия заставляет код "углубляться" внутрь структуры данных, доходя до самого конца, а затем начинает возвращаться обратно, выполняя оставшуюся часть кода для каждого уровня вызова. Это и приводит к тому, что значения выводятся в обратном порядке.
    Либо так:
    if(typeof list[elem] == 'object') {
            		console.log(list.value);
                reverseNext(list[elem])
            }


    Либо так:
    if(typeof list[elem] == 'object') {
                reverseNext(list[elem])
            } else {
            	console.log(list.value)
            }
    Ответ написан
    2 комментария
  • Почему сжимается текст под углом в GD?

    IvanU7n
    @IvanU7n
    nothing interesting here
    видимо баг в зависимостях, а именно libraqm:
    https://github.com/libgd/libgd/issues/887
    https://github.com/libgd/libgd/issues/790
    Ответ написан
    Комментировать
  • Чем отличается функция от конструктора и где применять то или это?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    зачем нужны конструкторы если можно пользоваться функциями и реализовать тот или иной код с помощью функции без надобности вызова его через new

    Да, можем. Точно так же можем записать всю программу в один файл и в одну функцию, в которой использовать простой goto. Вместо продуманной структуры классов. Как и не использовать фреймворки, стандартную библиотеку или можно для скорости работы программы писать её на ассемблере или даже машинных кодах сразу. Вместо простого и понятного кода в несколько слоёв абстракций, который понятен, легко сопровождается и позволяет не писать очередной велосипед в миллионный раз. Аналогично и с new Foo() - это просто всем понятная абстракция, говорящая "эта инструкция создаст объект такого-то класса и выполнит все необходимые инструкции для инициализации объекта". Думаю, мысль вполне ясна и детального объяснения не требует?
    Ответ написан
    Комментировать
  • Как в html выполнять замену текстового содержимого в зависимости от родительского тега?

    @rPman
    Когда речь идет о строгом следовании html (и не только, там и javascript может быть), то простым поиском или регулярными выражениями не получится.

    Нужно использовать готовый html парсер, либо штатные либо библиотеку simplehtmldom (рекомендую).
    Ответ написан
    Комментировать
  • Как решать задачу?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Надо сделать несколько наблюдений: во-первых, нам без разницы, в каком порядке шары на каждом уровне - важны лишь количества там шаров всех 4 цветов. Во-вторых, если на каком-то уровне остались только белые шары - то мы этот уровень больше никогда трогать не будем. В-третьих, что бы мы не делали на одном уровне - это никак не влияет на другие уровни. Поэтому можно их все рассматривать независимо. Надо решить задачу для каждого уровня отдельно и просуммировать количество дней (и единицы, если на уровне можно что-то оставить).

    Рассмотрим теперь один уровень, который описан 4 числами a,b,c,d и нам надо оставить как можно больше шаров белого цвета (их d). За один ход мы можем приравнять к 0 одно из 4 чисел и вычесть по 1 из отсавшихся ненулвевых. Ясно, что нет смысла занулять d. Т.о. за 3 хода мы можем получть 0,0,0,max(0,d-3). Но, например, если у нас было 2 2 2 3, то занулив a и b мы уменьшениями на 1 зануляем и c. Т.е. для маленьких чисел имеет смысл подумать в каком порядке их занулять. Но мне лень даже думать как именно - ведь их всего 3 числа - можно тупо перебрать все 6 перестанвок и выбрать ту, в которой за наименьшее количество ходов мы их все занулим.
    Ответ написан
    6 комментариев
  • Что делать с Постановлением Правительства № 258 от 01.03.2024 по АТЗ?

    @Wexter
    У нас нет ИБ-шника

    С этого и начните
    Ответ написан
    Комментировать
  • Облачное хранилище Bitrix не отображаются картинки почему?

    Проверьте что выводится в коде сайта
    Проверьте домен, cors
    Проверьте отдаются ли размеры картиной
    Ответ написан
    Комментировать
  • Что лучше юзать для восстановления системы BTRFS или RSYNC на Linux?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Хм. Загадочный какой-то вопрос... Типо "если я приделаю на автомобиль крылья - будет ли он плавать под водой?".

    BTRFS - формат файловой системы (Binary TRee FileSystem)
    rsync - программа синхронизации чего-то с чем-то

    Я не вижу тут ничего о восстановлении чего бы то ни было...
    Ответ написан
    Комментировать
  • Как фильтровать массив в массиве методом filter?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Чтобы сделать эту порнографию, нужно прочитать первые 10 страниц любого учебника javascript.
    - return item[index] >= 25
    + return item[1] >= 25 && item[2] === true
    Ответ написан
    4 комментария
  • Как сформировать список по вложенному массиву рекурсивной функцией?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ну, будем извращаться.
    <?php
    function formatList(array $list): string
    {
        $result = '';
        foreach ($list as $key => $value) {
            if (!is_array($value)) {
                $result .= "<li>{$key} => {$value}</li>";
                continue;
            }
            $result .= "<li>{$key} =></li>";
            foreach ($value as $item) {
                $result .= formatList($item);
            }
        }
        if ((debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['function'] ?? '') !== 'formatList') {
            $result = "<ul>{$result}</ul>";
        }
        return $result;
    }
    print formatList($arr);

    <ul><li>id => 1</li><li>name => item1</li><li>items =></li><li>id => 2</li><li>name => item2</li><li>items =></li><li>id => 3</li><li>name => item3</li><li>items =></li><li>id => 4</li><li>name => item4</li><li>items =></li><li>id => 5</li><li>name => item5</li><li>items =></li><li>id => 6</li><li>name => item6</li><li>items =></li></ul>
    Ответ написан
    2 комментария