Задать вопрос
  • Почему методы массива могут принимать параметр колбек, а промис нет?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Либо
    Promise.all([4, 5, 6])
      .then(console.log)
      .catch(console.log);

    либо
    Promise.all([4, 5, 6])
      .then(data => console.log(data))
      .catch(err => console.log(err));
    Ответ написан
    Комментировать
  • Почему docker при запуске не может найти пакет xdebug?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Пакет называется php-xdebug, а не xdebug, но даже если указать имя правильно пакет не установиться, потому что в репозитрии его на самом деле нет. Устанавливай его из pecl или используй Debian в качестве базового образа и устанавливай пакеты из репозитория https://packages.sury.org/php/ (я бы даже рекомендовал делать так потому что образ получиться меньше размером).
    Ответ написан
    Комментировать
  • Как в js обновить список нод в querySelectorAll и их EventListener после удаления ноды?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    слушайте событие клика как jQuery – не на каждой кнопке по отдельности, а один раз на общем родителе: на этом .show-cart

    В обработчике проверяйте, по чему именн, там, где-то в дочерних, кликнули (см. event.target). Если у кликнутого есть класс .delete-item, то действуем далее.

    Слушать на общем родителе – называется волшебным термином «делегирование событий».
    Ответ написан
    1 комментарий
  • Как уменьшить вес gif с помощью php?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    GIF использует lzw-сжатие без потерь. Уменьшить размер файла можно только убрав часть информации, то есть уменьшив разрешение изображения или количество цветов.
    Ответ написан
    1 комментарий
  • Почему не работает toLocaleString() после toFixed()?

    IvanU7n
    @IvanU7n
    nothing interesting here
    потому что Number.toFixed() на удивление возвращает строку, для строки нужно что-то типа .replace('.', ',')

    ПЛЮС: ну или сношения с Math.round() и потом .toLocaleString()
    да и .toLocaleString() использует локаль браузера, которая не всегда бывает нужная, да ещё и вставит пробелы или запятые между разрядами
    уж если нужен конкретный формат, то ЕМНИП .toLocaleString() принимает локаль в качестве параметра
    Ответ написан
    6 комментариев
  • Какой язык программирования выбрать для разработки астропроцессора?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    В принципе любой. Если ближе к образцу - то он на JS. Для веб полно графических либ и движков.
    Ответ написан
    3 комментария
  • В чем может быть причина сильного увеличения длительности ответа запросов при установке Load Balancer на 2 сервера со стаком MySQL, PHP, Nginx?

    Система слишком сложна для того, чтобы можно было вот так вот взять - и ответить на ваш вопрос, не изучив её. Когда в системе хотя бы несколько компонентов, взаимодействующих между собой, это сигнал к тому, что всё нужно обвесить мониторингом.

    Рекомендую вам найти слабое звено, начиная с самого конца:

    1. Создайте тестовое окружение в тех же облаках, с такими же компонентами, с идентичным конфигом и воспроизведите поведение при помощи какой-нибудь утилиты, которая будет нагружать эту конфигурацию, пуляя в неё запросы с необходимой частотой.

    2. Когда тестовое окружение будет так же тормозить, начните искать слабое звено. Рекомендую начать с конца.

    3. Замените весь ваш прекрасный PHP код на один единственный файл index.php с Hello World. Если проблема уйдёт, значит виновата ваша программа. Чтобы найти место уже в программе, рекомендую запустить Prometheus + Grafana, установить библиотеку в ваш PHP, и писать в мониторинг длительность каждой сложной операции (длительность всего запроса, длительность запросов к базе, длительность запросов во внешние API, длительность каких-то подозрительных циклов, алгоритмов и т.д.) Так вы сможете найти точное место в программе, где происходит затуп. Это надо будет сделать и на проде после решения проблемы, чтобы вы всегда знали, что происходит с вашим проектом.

    4. Если проблема не в программе, проверьте конфиг PHP. Может быть, у вас там тупо мало воркеров включено, может быть не включён OPcache и т.д. Почитайте, как правильно настраивать PHP на проде.

    5. Если проблема не в этом, то... https://youtu.be/bq3HksAwb2Q?si=NsBZeYeHsq69JW6o
    Ответ написан
    Комментировать
  • Влияет ли на быстродействие и потребление памяти, отказ от обращения к свойствам класса, внутри методов?

    @iljaGolubev
    Быстрее будет присвоение $someProperty = $this->someProperty до цикла.
    Но это именно про приведённый код с учетом, что цикл 1000 внутри someMethod. Прирост скорости настолько незначительный, что в реальных условиях может выиграть и echo $this->someProperty;
    Но ведь в реальности такой код не имеет смысла...
    Если уж заменять, то с реальными циклами и требуемым окружением.

    По памяти разницы нет - создание новой переменной без изменения не выделяет дополнительную память.
    `CV` - compiled variable == ссылка на реальную переменную.

    // для echo $someProperty;
    0000 EXT_STMT
    0001 T0 = FETCH_OBJ_R THIS string("someProperty")
    0002 ECHO T0
    0003 EXT_STMT
    
    // для echo $this->someProperty;
    0000 EXT_STMT
    0001 T1 = FETCH_OBJ_R THIS string("someProperty")
    0002 ASSIGN CV0($someProperty) T1
    0003 EXT_STMT
    0004 ECHO CV0($someProperty)
    0005 EXT_STMT


    Мини-микро-нано прирост скорости возможет только из-за того, что в цикле для `echo $someProperty; ` будет выполняться только ECHO, тогда как для `echo $this->someProperty; ` две инструкции FETCH_OBJ_R и ECHO.
    Ответ написан
    Комментировать
  • Как с помощью девтулзов определить что меняет текст HTML элемента?

    @its2easyy
    Если в инспекторе удалить textarea, то можно увидеть что блок с кодом со страницы не пропал. Если это повторить ещё несколько раз, каждый раз тыкая в то место, где визуально находиться элемент, то можно дойти до .react-code-lines где и лежат блоки с текстом. А через поиск они не находятся, потому что они не идут одной непрерывной строкой
    670e7aa26dea8421875672.png
    Ответ написан
    1 комментарий
  • Как правильно передать строку из js в php при помощи ajax?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Ответ написан
    Комментировать
  • Как отфильтровать по вложенной коллекции laravel?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Красиво у каждого своё, плюс оно зависит от нюансов проекта.
    При условии, что мы не знаем заранее количество ключей lvlX, я бы написал так:
    // Если нужно полностью удалить элемент, внутри которого есть хотя бы один нулевой lvl
    array_filter(
        $a,
        function (array $item): bool {
            foreach ($item as $key => $value) {
                if (preg_match('~^lvl\d+$~', $key) === 1 && ($value['count'] === 0 || $value['min'] === 0 || $value['max'] === 0)) {
                    return false;
                }
            }
    
            return true;
        }
    );
    
    // Если нужно удалять только сами нулевые lvl
    array_map(
        function (array $item): array {
            return array_filter(
                $item,
                function ($value, string $key): bool {
                    return preg_match('~^lvl\d+$~', $key) !== 1 || ($value['count'] !== 0 && $value['min'] !== 0 && $value['max'] !== 0);
                },
                ARRAY_FILTER_USE_BOTH
            );
        },
        $a
    );

    Код нужно адаптировать в зависимости от того, где там у вас реально коллекция, а где массив, но это уже тривиальная задача.
    Ну и здесь предполагается, что структура каждого lvl фиксированная, то есть там всегда есть указанные ключи, чтобы не загромождать код проверками isset().

    Ну а самое красивое, на мой вкус, переделать структуру на более адекватную:
    [
        [
            'name' => 'Alex',
            'levels' => [
                ['index' => 1, 'count' => 5, 'min' => 12, 'max' => 5],
                ['index' => 2, 'count' => 0, 'min' => 5, 'max' => 7],
                ['index' => 3, 'count' => 18, 'min' => 0, 'max' => 8],
            ],
        ],
        [
            'name' => 'Igor',
            'levels' => [
                ['index' => 1, 'count' => 5, 'min' => 12, 'max' => 5],
                ['index' => 2, 'count' => 0, 'min' => 5, 'max' => 7],
                ['index' => 3, 'count' => 18, 'min' => 0, 'max' => 8],
            ],
        ]
    ];
    Тогда и код фильтрации будет простым и понятным.

    Если же ключи lvl1, lvl2 и lvl3 фиксированные, то, на мой вкус, лучше их захардкодить, это тоже значительно упростит жизнь в будущем, когда вы этот код откроете через пару лет и будете пытаться вспомнить что это за нагромождение из map, filter и регулярок.
    Ответ написан
    2 комментария
  • Как настроить ssh подключение для рута без пароля?

    akelsey
    @akelsey
    serg-novoch, непонятно зачем в рута лезть ключем из папки рут, логично что пользователь feanor не имеет доступа в /root на хосте где лежат ключи.

    логичнее конечно отказаться от подключения к руту, оно вроде как нафиг не нужно, но в крайнем случае если уж приспичило, скопировать ключ
    /root/.ssh/prod в /home/feanor/.ssh/prod_root
    дать ему права для пользователя feanor и поправить в config путь к ключу
    Ответ написан
    1 комментарий
  • Как передать большой файл по ssh без промежуточного хранения?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    tar -cz /home/target | sshpass -p 'pwd' ssh -p 23 username@server.com 'cat > /home/backups/destination.tar.gz'


    Все должно так работать. Если у вас ошибка от tar, то может это не stdout а stderr?
    Приведите текст что там не так. Файл в конечно счете правильный выходит?
    Ответ написан
    Комментировать
  • Почему ajax выполняется по очереди?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вангую - на бэке PHP и сессии. Причём, открываются сессии в начале скрипта, а закрываются никогда, то есть по завершении скрипта.
    Тогда пока работает скрипт, файл сессии держится открытым и второй скрипт в той же сессии будет ждать освобождения файла. Файл сессии надо освобождать как можно раньше. session_start, считали нужные данные и сразу же session_write_close. Если надо что-то изменить в сессионных данных в процессе работы скрипта, то снова открыть сессию, записать изменения, закрыть.
    Ответ написан
    Комментировать
  • Почему не работает подсветка php в vs code?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    На первом скрине не PHP-код, а обычный текст, так как нет открывающего тэга <?php
    Цвет отдельных участков кода определяется цветовой темой, Settings -> Workbench -> Appearance -> Color Theme.
    Ответ написан
    Комментировать
  • Как правильно бэкапить в этом случае?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    У Вас просто неправильный подход. Нужно не на сервер ходить за файлами, а сервер должен сам бекапить в нужное место. Тогда и проблемы с root не будет.
    Работал с тремя bareos (bakula), urbackup, borg - все достойны. В Вашем случае, наверное, borg - лучший выбор.
    Ответ написан
  • Почему докер не видит MySql?

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

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Метод getOfers() должен возвращать объект класса, а не true.

    class ProductAmount
    {
        function __construct($array = array()) { 
            ...
        }
    
        function getOfers($items = []) {
            ...
            return $this;
        }
    
        function getProfuctStore($inListStore = 'N') {
            ...
            return $this;
        }
    
        function setListStore($inListStore = 'Y') {
            ...
            return $this;
        }
    }


    $obj = new ProductAmount();
    $res = $obj->getOfers([229411])->getProfuctStore('Y')->setListStore('Y');
    Ответ написан
    Комментировать