Задать вопрос
  • Как из массива объектов удалить дублирующиеся объекты?

    @alexalexes
    Можно удалить id из элемента массива (точнее из копии элемента), оставшиеся свойства засериализовать, от сериализации найти md5 хэш - это и будет ориентир для уникальности элемента.
    $out_array = [];
    foreach($donates as $donate)
    {
       $donate_copy =  $donate; // копируем элемент массива
       unset( $donate_copy->id); // удаляем уникальное свойство из элемента
       $key = md5(serialize($donate_copy)); // получаем уникальный ключ по содержанию остальных свойств
       $out_array[$key] =  $donate; // добавляем исходный элемент в новый массив по уникальному ключу
    }
    Ответ написан
    2 комментария
  • Как выдавать пустую страницу в PHP?

    @alexalexes
    Проблема такой защиты от DDOS на PHP в том, что атакующий пользователь все же успевает запустить скрипт на PHP, хоть и с минимальными ресурсами. Если у вас архитектура серверного приложения построена не на event loop (как правило, обычные сайты), то для каждого запущенного скрипта выделяется отдельный системный процесс - не самый экономный вариант работы PHP сервера.
    Поэтому, нерадивых пользователей лучше отшивать как можно раньше.
    Идентифицировать плохого пользователя вы можете и на PHP, а вот работу по его отсечению лучше доверить системе, которая стоит перед PHP сервером. Это может быть и Apache, и Nginx.
    Определяете пользователя и добавляете его в файл черного списка по IP, user agent или cookie, который будет обрабатывать настроенный Apache или Nginx.
    Лучше конечно, чтобы это был отдельный файрвол, еще лучше - на железке (но в условиях арендуемого хостинга такое маловероятно).
    Ответ написан
    Комментировать
  • Как извлечь текст из exe файла?

    @alexalexes
    В общем случае эта задача реинжиниринга ресурсов. Для простого копипастинга не имеет смысла.
    Если нужно выдрать какую-то простыню текста, которая выводится на экран или в окне продолжительное время, чтобы можно было сделать снимок, то самым эффективным будет метод фото или видео захвата экрана с последующим OCR распознаванием текста по отдельным кадрам.
    Все остальное очень затратно, если превентивно не обладать знаниями, чем скомпилирован exe, и есть ли возможность обратно распаковать его при такой-то технологии комплиляции.
    Ответ написан
    Комментировать
  • Как заполнить столбец с foreign key?

    @alexalexes
    Это делается апдейтом с подзапросами.
    update table tb
          set tb.type_id = (select tp.id from types tp where tp.name = tb.type_name limit 1) -- выбираем подзапросом id из справочника по совпадению наименования поля в обновляемой таблице
     where tb.type_id is null -- страховка, что будем обновлять не установленные значения
         and exists(select 1 from types tp where tp.name = tb.type_name) -- будем ставить ключ, если есть наименование в справочнике types

    PS: Прежде чем выполнять update, убедитесь при помощи select с тем же where, что вы вставите нужные для вас значения в поля секции set. По принципу поговорки: "Семь раз select-ни - один раз update-ни".
    PPS: Желательно, избегать ситуаций, когда вам периодически нужно нормализовывать структуру данных, в идеале, при insert-е нужно сразу определять ключик, а поле наименования использовать только тогда, когда нужного наименования нет в справочнике.
    Ответ написан
  • Как вытащить информацию из XML вне зависимости от используемых неймспейсов?

    @alexalexes
    Читаете каждый узел, определяете его имя, читаете его атрибуты.
    Если элемент имеет признаки определителя неймспейсов, например, называется export и имеет атрибуты xmlns:ns*, то это и есть определитель наймспейса. Нашли определитель, останавливаете поиск определителя.
    Возможно, для дальнейшего чтения нужно взять этот список атрибутов и искать только этих потомков.
    PS: Термин определителя неймспейсов взят от балды. Для такой структуры данных нужна вполне определенная техническая документация, которая должна давать исчерпывающий ответ, как ее использовать.
    Ответ написан
    1 комментарий
  • Как сделать подобное меню?

    @alexalexes
    Решение без JS:
    Принцип действия: Над кнопкой показа меню добавляется скрытый чекбокс, который выступает как триггер состояния. Состояние чекбокса управляет применяемым css правилом на меню.
    Кнопку "Server systems development" и скрываемое меню делаете в одном контейнере top-left-container.
    На том же уровне, где находится меню делаете прозрачный input type="checkbox" над кнопкой "Server systems development".
    Вывод и скрытие меню задаете примерно такими правилами:
    div.top-left-container input[type="checkbox"]:checked ~ div.menu
    {
    /*анимация появления меню*/
    }
    div.top-left-container input[type="checkbox"]:not(:checked) ~ div.menu
    {
    /*анимация скрытия меню*/
    }

    Решение c JS:
    Вешаете обработчик на кнопку Server systems development, проверяете наличие класса отображения на меню. Если нет класса, то добавляете, если есть то убираете (в Jquery будет использоваться функция toggle).
    Ответ написан
    Комментировать
  • Какие есть варианты устранения ошибки Memory Error у RAID контроллера?

    @alexalexes
    Ошибка намекает, что что-то не так с оперативной памятью контроллера.
    Многие мануалы рекомендуют просто снять контроллер и планки памяти контроллера и собрать их обратно.
    Ответ написан
    1 комментарий
  • Как обрабатывать Undefinded в JSON (Ajax jquery)?

    @alexalexes
    Если у вас железобетонно всегда присутствует объект data.noticeInfo, но временами отсутствует свойство document, то можно проверять наличие так:
    if('document' in data.noticeInfo)
    {
    }

    или так, если нужно различать свойства обусловленные прототипом и доприсвоенные свойства:
    if(data.noticeInfo.hasOwnProperty('document'))
    {
    }

    Если свойство лежит глубоко, а проверять существование цепочки свойств/объектов до него лень, не схлопотав предупреждения отладчика, или запись получается слишком громоздка, то нужен аналог функции isset из PHP для JS.
    if(typeof data.noticeInfo.document != "undefined" && data.noticeInfo.document !== null)
    {
    }
    Ответ написан
    Комментировать
  • Как получить удаленный доступ к телефону?

    @alexalexes
    Все перечисленные способы будут либо незаконны, либо аморальны, либо приведут к ожирению.
    Ответ написан
    Комментировать
  • Почему Удаляются записи из БД, ООП, php?

    @alexalexes
    ... на глобальном сбой.

    Вероятно, нужно докопаться до текста ошибки, чтобы понять, в чем дело?
    Но можно предположить, что от места выполнения у вас чувствительна вот эта строчка:
    $this->go_to_back_one_stap = explode('.ru', $_SERVER['HTTP_REFERER']);

    Выведите в отладочный файл значение $_SERVER['HTTP_REFERER'] на боевом окружении и посмотрите, то ли вы ожидаете в ней значение, чтобы разделить ее по '.ru' и взять элемент с индексом 1.
    Ответ написан
  • Как оптимально сделать таблицу умножения?

    @alexalexes
    Вот решение на Oracle.
    Достоинства:
    1. Подобрано максимально короткое описание вспомогательной выборки factor от 1 до 10 без перечисления ее элементов или обращения к другим таблицам.
    2. Поскольку нужно получить декартово произведение вспомогательной выборки, и не хочется повторять ее описание, то используем with.
    3. Не нравится писать слово join? У декартового пересечения нет условий, значит с соединением таблиц справится обычная запятая.
    Недостатки:
    1. СУБД должна мочь в рекурсивные запросы ( ... connect by ... ).
    2. СУБД должна мочь в выносимые запросы (with ...).
    3. Скорость рекурсии несколько ниже чем просто перебор описания 10 строк.

    with factor as (select level as lvl from dual connect by level < 10)
    
    select to_char(f1.lvl) || 'x' || to_char(f2.lvl) || '=' || to_char(f1.lvl * f2.lvl) as multi
    from factor f1,
        factor f2
    Ответ написан
    Комментировать
  • Можно ли работать двумя программами с одной базой данных?

    @alexalexes

    Обе программы получают из базы данные и работают с ними. Так вот я хочу исключить вероятность получения одних и тех же данных обеими програмамми. Сейчас у меня в коде используется using и в нем идет открытие соединения. Далее, получаем данные, в определенном столбце таблицы я помечаю, что данные взяты, что свидетельствует второй программе о том, чтобы она эти данные уже не брала.

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

    @alexalexes
    Первым действием перетранслируйте этот массив во вспомогательную структуру:
    {
        100: // groupId
        {
           1:  [1, 3], // source: [id, id, .....]
           2: [2]
        },
       ......
    }

    Тогда вам будет проще снимать метрики для сортировки: считать какие source есть у группы (сколько, каких нет), и какие id входят в source.
    Ответ написан
  • Как поставить перенос строки в функции mail?

    @alexalexes
    https://www.php.net/manual/ru/function.mail.php
    Читайте документацию:
    Каждая строка должна быть отделена символом CRLF (\r\n). Строки не должны быть длиннее 70 символов.
    Ответ написан
    Комментировать
  • Как в Oracle или Teradata разбить все строки таблицы на N равновеликие СЛУЧАЙНЫЕ выборки?

    @alexalexes
    Практически методом Монте-Карло помечаем числами из случайного интервала записи таблицы и берем интересуемую порцию по этой случайной метрике. Поскольку, рандом у нас по равномерному закону распределения работает, то и порцию данных вы получите примерно ожидаемой длины.
    select *
    from (
    select t.*, dbms_random.value(0, 100) rnd
      from table t
    ) A
    where A.rnd <= 30 -- выбираем примерно 30% случайных записей от ген. выборки
    Ответ написан
  • Как получить доступ к атрибуту элемента для условного задания класса?

    @alexalexes
    Если у вас этот список строится через v-for, то ничего не стоит на нужном элементе подсунуть нужный класс.
    Ответ написан
  • Как найти обьект без ключа JSON decode PHP?

    @alexalexes
    Пересоберите массив пользователей:
    $out_users = [];
    foreach($array_decode['response'] as $user)
      $out_users[$user['id']]['user'] = $user['user'];

    Тогда сможете обращаться как хотели:
    $out_users[идентф_ключа]['user'];
    PS: Вариант пересборки, если вас куча пользователей и вы ограничены по оперативной памяти скрипта:
    $out_users = [];
    foreach($array_decode['response'] as &$user) // обратите внимание на доступ по ссылке & к элементу массива
    {
      $out_users[$user['id']]['user'] = $user['user'];
      unset($user); //удаляем элемент из массива $array_decode['response'], чтобы не росло использование памяти.
    }
    Ответ написан
    1 комментарий
  • Ошибка Uncaught TypeError: Cannot read property '2' of null?

    @alexalexes
    У вас несоответствие бизнес-логики формирования цены товара на стороне сервера (то что получаете в response.prices), и как вы ее пытаетесь обработать функцией getSapogCost() на стороне клиента. Либо у вас не обрабатываются какие-то исключительные случаи, например, когда товар отсутствует в продаже, а сервер в качестве response.prices не возвращает тот объект, который может обработать данная функция.
    Ответ написан
    Комментировать
  • Как научиться выделять смысл?

    @alexalexes
    Попробуйте в двух словах сказать (лучше оперировать голосом, а не мыслю), что говорится в первой абзаце текста, и отдельно - во втором.
    Потом, чем они отличаются по содержанию. Сравнивайте 2 и 3 абзац. В таком духе двигайтесь дальше по тексту.
    По окончании текста подведите итог, о чем он и как развивалась мысль от начала и до конца.
    Так вы научитесь сжимать текст и выделять смысл, и никакие карточки вам не понадобятся.
    Ответ написан
    Комментировать
  • Как LEFT JOIN-ом присобачить только одну сроку, причем не любую, а наибольшую по данному полю?

    @alexalexes
    Если вам нужен исключительно номер телефона из присоединяемой таблицы и ничего больше, то подойдет подзапрос как свойство с использованием max.
    select C.Name,
    (select max(T.Phone) from Telephone T where T.Name = C.Name) Max_Phone
    from Clients C

    PS: Если это практическая задача, а не теоретическая-разминочная, то должно смутить использование имени клиента как первичного ключа в таблице клиентов и как внешнего ключа в таблице телефонов. На практике, обычно, для связки таблиц используются идентификаторы.
    Ответ написан
    2 комментария