• Что такое /var/www/html/index.html и как отнять у него 80 порт?

    Файл не может "хоститься на порту". Порт занимает какая-то программа, команда netstat -tulpn | grep :80 её покажет.
    Вы либо недоубрали Апач, либо у вас Nginx ещё есть или какой-то другой веб-сервер. Содержимое файла ещё может дать подсказку.
    Ответ написан
    Комментировать
  • Почему форма обратной связи php отправляет часть кода?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) Тело хтмл письма, как и любой подвид иксмл, должно начинаться с оперделяющих тегов, у вас же тупо табличка отправляется.
    2) Заниматься мастурбациейфигней с отправкой через mail() в 21 веке как минимум стыдно, как максимум чревато проблемами при отладке и смене функциональности, не говоря уже о том что отправка хтмл контента и приложений становится задачей со звездочкой.
    3) Все легко решается переходом на нормальную библиотеку отправки почты, пхпмэйлер/свифтмэйлер и их многочисленные аналоги.
    Ответ написан
    3 комментария
  • Как максимально быстро кликнуть на элемент в браузере?

    @Antonosyan
    Для таких вещей советую использовать MutationObserver вместо рекурсивной проверки наличия элемента. MutationObserver позволяет отслеживать изменения в DOM-дереве и вызывать функцию обратного вызова при их возникновении. Это может существенно ускорить работу функции, так как она не будет постоянно проверять наличие элемента.

    Вот по вашему примеру будет примерно так

    function observeAndClickElement() {
      const targetSelector = '.f5-notifier-notification-action_btn';
      const observer = new MutationObserver((mutationsList) => {
        for (let mutation of mutationsList) {
          if (mutation.type === 'childList') {
            const notificationButton = document.querySelector(targetSelector);
            if (notificationButton) {
              notificationButton.click();
              console.log("Кнопка в уведомлении была нажата");
            }
          }
        }
      );
    
    
    observer.observe(document.body,  childList: true, subtree: true );
    observeAndClickElement();


    В этой функции мы создаем новый экземпляр MutationObserver и передаем ему функцию обратного вызова. Затем мы запускаем отслеживание изменений в DOM-дереве, указав, что мы хотим отслеживать изменения в дочерних элементах body. Когда происходит изменение, мы проверяем наличие элемента и, если он есть, нажимаем на него.

    Такой подход должен работать гораздо быстрее
    Ответ написан
    Комментировать
  • Что это такое и как защититься?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    По двору прошелся жулик и попытался хакнуть эксплойтом для "майбаха" (условно) все тачки в вашем дворе. Майбахов не нашлось, этот жулик пошел дальше и забыл уже про ваш дворик.

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

    Вообще, если ваш сетап на виртуальных машинах в повторяемой среде и с декларативной конфигурацией вроде кубера или докера, то вы легче сможете пережить всякие такие факапы.
    Схема такая.
    Есть признаки взлома - бэкап логов, снапшот базы, бэкап стораджа, остановка сервисов (если позволяет продакшн), анализ атаки и последствий. Устраняем уязвимость по вектору атаки (гугление по логам и курение тредов), правим конфиги развёртывания и запускаем прод. Потом долго и тщательно разбираемся по логам, снапшотам и бэкапам что затронуто. Делаем тестовый чистый сетап по старой конфигурации и сравниваем пофайлово с атакованной системой, выясняем в какие места вмешались злодеи. Дифаем базу и смотрим на подозрительные различия. Делаем выводы, объявляем об утекших данных, если есть такие признаки (чтобы не подставлять пользователей), принимаем превентивные меры против похожих векторов атак.

    Итого, залог успеха - это хранение конфигураций в гит-репозитории, своевременные бэкапы, хранение бэкапов на отдельных изолированных стораджах, оркестрация и автоматизация развертывания, подробное эшелонирование логирование с бэкапами логов, смоук тесты на нестандартную активность в БД, по сетевым интерфейсам, трафику, процессору, памяти, файловым системам, логам...

    Это взгляд дилетанта по безопасности, если чего пропустил -- поправьте. Если где не прав -- расскажите.
    Ответ написан
    3 комментария
  • Что быстрее SQL или Javascript?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В общем, чтобы не издеваться над девушкой, объясним на пальцах.

    Во-первых, заголовок у вопроса чудовищно некорректный. Это все равно что спросить, "что быстрее - пылесос или стиральная машина?"
    Во-вторых, ответ на вопрос "производить ли обработку данных в БД или же запросить все данные в клиентское приложение и обрабатывать там" совершенно очевиден: обработку данных следует производить в общем случае только в БД. Она для этого и придумана. Чтобы обрабатывать значительные объемы данных.

    Да, js тоже "может" обрабатывать большие объемы данных.
    Но чтобы значительный объем данных обработать, его сначала надо передать, полностью забив канал между сайтом и базой
    Чтобы значительный объем данных обработать, его надо сначала проиндексировать. Причем делать это каждый раз, а не использовать уже имеющийся набор индексов
    Чтобы значительный объем данных обработать, надо иметь значительный объем памяти или упасть из-за её недостатка
    Чтобы значительный объем данных обработать в многопоточном режиме (а сайт как раз является многопоточной системой), все вышеперечисленное надо умножить на количество посетителей сайта - при каждом запросе перегонять весь массив данных, выделять память, индексировать, считать. Если же вы оставляете все данные в памяти приложения, то их тогда надо как-то синхронизировать с БД. То есть вы себе собираете кучу проблем на пустом месте.

    Несомненно, из любого правила есть исключения. И бывают ситуации, когда приходится считать в приложении.
    Но на вопрос в общем виде ответ будет совершенно однозначный. Не "может так, может сяк", а только в БД.
    Ответ написан
    9 комментариев
  • Как оптимизировать NOT IN (SELECT)?

    Revencu
    @Revencu
    SELECT `item_id`, ... 
    FROM `items_table` AS t1
    LEFT JOIN `shown_table` AS t2 on t1.`item_id`=t2.`shown_id`
    WHERE [сложное условие для поиска] 
    AND  t2.`user_id`=$user_id AND t2.`item_id` IS NULL
    LIMIT 1;
    Ответ написан
    Комментировать
  • Бан телефонных номеров в веб-приложении

    ruskar
    @ruskar
    Conflict Intelligence Team
    Имхо, обычные способы бана по телефону бесполезны. Просто очень хорошо знаком с работой досок «изнутри» и с методами работы этих самых «некоторых товарищей».

    Вот что эти товарищи будут делать, когда увидят сообщение «объявление не размещено, т.к. ваш номер телефона забанен на нашем сайте!»? Да они тупо возьмут другой номер и запостят своё объявление. И так до следующего раза.

    На одном из своих проектов я решил проблему по-другому. Задача такая: максимально достоверно опознать «нехорошего человека».

    Что я для этого делаю?



    Если пользователь указал для своего объявления номер телефона, который у меня в чёрном списке, я:
    1. ставлю ему бессрочные Cookie с меткой что данный пользователь — тот ещё петрушка;
    2. также запоминаю в базе максимальное количество идентифицирующих его данных (IP, юзер агент браузера и т.д.);
    3. его объявление сохраняю в базе и помечаю его как «полускрытое». Это значит, что объявление видно исключительно ему, для него создаётся видимость, будто всё прошло успешно и объявление опубликовано. На самом же деле, всем остальным пользователям сайта оно не показывается (в том числе незалогиненным);
    4. если «нехороший человек» догадался, что я его обманул и теперь он вбивает очередной свой шлак, то, используя пункты 1 и 2 я снова его определяю, заношу в чёрный список уже новый номер, повторяю по новой пукнты 1 и 2.

    В результате все «редиски» смотрят на мой сайт довольные, думают что я нормально опубликовал их объявления, не пытаются всеми возможными и невозможными способами обойти защиту (поскольку они подумали, что они её обошли), а в действительности сайт остаётся чистым.
    Ответ написан
    4 комментария
  • Как найти все элементы в коде во всех файлах?

    delphinpro
    @delphinpro Куратор тега PhpStorm
    frontend developer
    Когда не знаете хоткей, его всегда можно подсмотреть в меню или в настройках

    в меню
    620e47eb75383759605581.png

    в настройках
    620e479a76c44336758503.png
    Ответ написан
    Комментировать
  • Почему вычисления происходят именно так?

    Stalker_RED
    @Stalker_RED
    JS тут не при чем, это особенности вычислений с плавающей запятой, и они описаны в стандарте IEEE 754, и именно так работает большинство процессоров.
    Если вы хотите чтобы работало "согласно ожиданиям", то есть варианты:
    1. подкорректировать свои ожидания, и работать как все.
    2. использовать библиотеки для всяких длинных арифметик и прочих повышенных точностей, платя за эту точность скоростью вычислений.
    3. использовать языки, которые будут маскировать проблему, округляя числа втихаря (и рисковать нарваться на неточности уже из-за этих округлений, ага).

    https://0.30000000000000004.com/ -- тут подробно, с примерами на разных языках.
    Ответ написан
    3 комментария
  • Как сделать чтобы по ide:// открывался PHPStorm в Windows?

    @sl0
    Под винду нужен PhpStormProtocol
    Ответ написан
    Комментировать
  • Где в php-storm включается эта панель?

    daemonhk
    @daemonhk
    ПсиХоПат
    Думаю, и так все понятно:
    61a9a0e357ae3817756232.png

    А за неумение гуглить, я бы руки отрывал...
    https://intellij-support.jetbrains.com/hc/en-us/co...
    Ответ написан
    Комментировать
  • Как работает git lfs?

    @aol-nnov
    > Прошу помощи
    помогаю разглядеть суть. дешево. оптовикам скидки

    remote: error: File img/RazerCortexSetup_8.0.104.420.exe is 151.63 MB; this exceeds GitHub's file size limit of 100.00 MB
    Ответ написан
    7 комментариев
  • Откуда берутся пустые табуляции при любом изменении файла?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    На твоём скрине я вижу обратное. Не появляются, а наоборот исчезают. И не табуляции, а пробелы.
    По умолчанию в редакторах JetBrains удаляются лишние пробелы (trailing spaces) только в изменённых строках. Проверь это у себя в настройках редактора вот тут Editor / General / On Save
    61441ce3441d5609665470.png

    Но, по хорошему, надо эти косяки в коде везде поправить.
    Ответ написан
    Комментировать
  • Есть ли что-то в PhpStorm такого, чего нет в VSC, что-то такое принципиально нужное, чтобы стоило рассмотреть как альтернативу?

    delphinpro
    @delphinpro Куратор тега PhpStorm
    frontend developer
    VS Code неплохой редактор. А если обвесить плагинами, то возможности приблизятся к полноценной IDE.
    PhpStorm – полноценная IDE что называется "из коробки". Установил и у тебя все есть сразу и работает.

    Поэтому вопрос знатокам - стоит ли плотно тестить шило, если уже есть нормальное мыло?))


    На мой взгляд – стоит. Но пары дней будет мало. Нужно неделю-две посидеть, освоиться. И потом не слезешь.
    Ответ написан
    9 комментариев
  • Странная подсведка проекта phpstrom?

    delphinpro
    @delphinpro Куратор тега PhpStorm
    frontend developer
    Подсветка не странная. Так отображаются файлы, исключенные из проекта. Либо через меню самого шторма, либо в файле гитигнор.
    Как видно у вас весь проект исключен.
    Либо нечаянно. Либо глюк.
    Можно убрать из excluded правой кнопкой по папке

    60d97f0ff035d517639842.png

    Если глюк, попытайтесь сделать инвалидацию кэша.
    В крайнем случае закрыть проект, удалить папку .idea, открыть проект заново.
    При этом сбросятся все локальные настройки данного проекта.
    Ответ написан
    2 комментария
  • Какие существуют хорошие готовые решения для реализации data transfer object на php?

    @kot999
    Backend software engineer
    Мне самому был бы интересен ответ на вопрос.
    Мысли вслух: Если сделать readonly объект и позволить его сетить только через конструктор, будет ли удобно это делать для больших объектов. Описывать конструктор который принимает 50 аргументов?
    может быть можно сделать доступ к аргументам через магический метод __get и аннотации, а сетить уже через сеттеры, билдером, например.
    Лично я параноиться по поводу ридонли я бы не стал, т.к. Если кто-то захочет изменить объект, он его изменит , рефлексию никто не отменял. Это скорее должно работать на уровне договоренностей.
    Но это только мое мнение, не претендую на истину.
    Ответ написан
    5 комментариев
  • Какие существуют хорошие готовые решения для реализации data transfer object на php?

    @vism
    У меня было время, когда всё идеально делать хотелось. И делал. А потом смотрел результат, можно было в 10 раз быстрее сделать, т.к. функционал не рос за несколько лет.
    А те вещи которые сделал гибко и громоздко, и которые часто менялись, да удобно. да гибко.
    Но по факту если бы всё сделал по простому, но с умом. Те пару компонентов можно было по факту отрефакторить.

    Вобщем теперь я перешёл на модель от малого к большему.
    Делать так, что задача была выполнена и код был красивый, но без оверхеда.
    И внезапно DTO стали к месту, а не месиво, и VO стали в тему, а не куча кода непонятно зачем нужного.

    Вобщем рефакторинг по мере усложнения, тем самым и уровень вхождения в проекты намного ниже, и быстрее и кода меньше.
    Ответ написан
    Комментировать
  • How best to scale a php application?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    You need to make your mind first, whether you want to "scale up" which means to split the processing between different servers, or you are not even sure yet, whether adding different instances is a good thing at all.

    Generally scaling up a web application indeed means providing dedicated hardware for the every major service involved. For your setup I'd make it four different servers
    - PHP/Nginx instance
    - database backend dedicated for Postgres
    - column database backend to host Clickhouse
    - processing backend to host rabbitmq and Golang microsevices

    The good thing, each of those can be easily scaled up in turn by simply adding more instances of the kind (I am not sure how it's done for Clickhouse tho).

    But I have a feeling that you are probably confusing the scaling up with just performance optimization. And you need to start from the latter. Simply checking the CPU load is tоo rough a measurement. You need a full qualified profiling to pinpoint certain bottlenecks.

    From such incomplete data I can only guess that Laravel configuration is not quite optimal. 75 rps shouldn't be a problem for such a hardware. Make sure you have all production environment settings configured properly - all caching is turned on, etc. Also, switching to 7.4 and preloading could also help.
    Ответ написан
    3 комментария
  • Как можно сделать чтобы из друх таблиц информация объединялась в одну?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Удалить таблицу main - за полной её ненадобностью и бессмысленностью. Вместо неё создать представление на основе остальных двух таблиц,
    Ответ написан
    Комментировать