• Как вынести запросы rest api на постоянное соединение?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ответ тут очень простой - никак.
    Мало того, что вешать все запросы на одно соединение просто глупо, когда БД может обрабатывать их тыщи. И та же нода, если делается по-уму, то использует пул соединений, а не одно.
    Но, главное, РНР так не работает.

    И проблема здесь не в количестве соединений, а в том, кто писал код.
    Если в коде используется только одно соединение за все время работы скрипта (а не открывает новое соединение на каждый запрос, как у всех гениальных скриптописателей), и база данных устроена по уму (не тормозит), то хватит даже самого дохлого хостинга с лимитом в 5 одновременных подключений. Просто потому что любой запрос к рест апи должен работать не дольше 0.01 секунды. И любые проблемы будут появляться только при частоте обращений больше 100 в секунду.

    Соответственно, вместо фантазий про "одно соединение" надо переделывать кривой код и базу данных.
    Ответ написан
    Комментировать
  • Можно ли припаять флешку к флешке?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Нет, но можно по цене банки пива купить флешку на 64 ГБ
    Ответ написан
    Комментировать
  • Нужен ли отдельный linux user для сайта?

    ValdikSS
    @ValdikSS
    Нужны отдельные unix-пользователи на сервис/проект/сайт, иначе в случае взлома сайта А будет возможность читать и модифицировать файлы сайта Б, т.к. все файлы принадлежат www-data.

    Отдельные пользователи нужны всем сервисам, которые так или иначе взаимодействуют с файлами. В случае PHP это php-fpm (или другой исполнитель) — у каждого сайта должен быть свой пул со своим пользователем. Всё, с чем взаимодействие ведётся только по сети/сокету и имеет правильное разделение привилегий (базы данных), должны работать от своего (стандартного) пользователя.

    В случае веб-сервера также уместно разделить статические данные от кода: картинкам и .js-файлам следует назначить www-data, чтобы веб-сервер мог их прочесть и раздать, а php-код любого сайта при этом не мог эти данные модифицировать. Верно и в обратную сторону — веб-сервер не сможет отдать ваши .php-файлы без их исполнения в случае некорректной настройки веб-сервера.
    Ответ написан
    Комментировать
  • Нужен ли отдельный linux user для сайта?

    vabka
    @vabka
    Токсичный шарпист
    Какой существует бестпрактис при разворачивании lemp стека с точки зрения пользователей.

    Обязательно нужен отдельный пользователь для работы веб-сервера, субд, php-fpm, redis итд - каждому из них выдать доступ только к тем директориям и файлам, к которым им доступ необходим.

    Нельзя чтобы они работали от рута или имени обычного пользователя, тк таким образом ты увеличиваешь площадь для атаки.

    А одном тг чатике сказали, что делают своего юзера, пусть будет app, через него запускают nginx и php-fpm и его же назначают владельцем и группой для файлов сайта (var/www/app), дают ssh авторизацию.

    Не вижу смысла выдавать app-юзеру права на логин по ssh. Все настройки можно делать и от имени административного пользователя - главное потом проверить что права выданы корректно.

    НО и надо помнить, что теперь нет нигде www-data и копипаст каких-то решений\конфингов может не завестись.

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

    у меня все работает, но, возможно, я не вижу какой-то ошибки, которая потом, в ci\cd, jenkinse, ansible или еще где-то мне ногу отстреллит.

    Значит потом для cicd / jenkins / ansible также заведёшь пользователя с нужными правами, как и у тебя, чтобы ворочать конфиги и файлы.
    Ответ написан
    2 комментария
  • Перешёл на PHP8.2 с PHP7.4 как обойти ошибку [TypeError] Cannot access offset of type string on string (0)?

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

    vabka
    @vabka
    Токсичный шарпист
    Райзен мощнее.
    Процессор - за счёт того что у него 6 полноценных ядер против 4B+4L на интеле.
    Видео - 660m сама по себе мощнее чем iris xe процентов на 30.

    Беда только в том что TDP делят между собой процессор и видео => максимальную мощность одновременно из обоих нельзя будет получить.

    Интел в некоторых задачах, вероятно, будет дольше держать батарею благодаря использованию энергоэффективных ядер (но точно не в играх, и не продуктах jb)
    Ответ написан
    1 комментарий
  • Как сделать сделать поиск по строке php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    stripos и strpos работают правильно

    А если вам вдруг кажется, что они работают неправильно, то надо привести пример.
    И тогда вам сразу объяснят, что вы делаете неправильно
    Ответ написан
    4 комментария
  • Почему PHP контейнер в docker-compose начинает очень медленно работать после некоторого времени бездействия?

    @humoured
    Вы всё на свете найдёте в коробке с карандашами
    С учётом предоставленных данных — потому что почему угодно.

    Что значит "медленно работать"? Какие метрики и чем измерялись? Где код docker-compose.yml? Какие образы используются? Кто и зачем отключает интернет?
    Ответ написан
    Комментировать
  • Будет ли справляться кулер "Thermalright Silver Arrow T8" (заявленная рассеиваемая мощность 320 Вт) с процом i9-13900K?

    nidalee
    @nidalee
    А я возражу, ради разнообразия.
    Не будет справляться.
    Цифры TDP от производителя кулера и производителя процессора считаются по разному и не могут сравниваться напрямую. В любом случае, 320ВТ для башни - нонсенс. Таких цифр даже Noctua не обещает.
    Бог с ней, с Noctua. Даже Wraith Ripper, сделанный специально для печи-Threadripper 2990WX, обещает всего 250. Как Thermalright собирается наколдовать 320 - вопрос открытый, и уже должен ставить под сомнение покупку такого кулера.

    Что касается реальной эффективности кулера, то
    Даже 11700К уже почти перегревается при загрузке на все ядра, если верить сторонним тестам.
    rezultaty-testirovaniya-kulera-thermalright-silver-arrow-t8-96719.png
    А это те же самые расчетные "125W" (200 реальных).

    Есть вполне современные и не дорогие варианты, которые должны справиться. Например.
    И всегда смотрите обзоры. У комбо из современного процессора и кулера всегда будут реальные обзоры "с полей".
    Ответ написан
    1 комментарий
  • Как следить за версионностью в клиент-серверном приложении, в выпускаемых фичах продукта?

    vabka
    @vabka
    Токсичный шарпист
    Вы пытаетесь решить несуществующую проблему.
    1. Нет никакой проблемы в том что два разных приложения (клиент и сервер) имеют разную нумерацию.
    2. semver нужен только если у тебя есть какой-то контракт, который тебе нужно соблюдать. Если контракта нет - можно использовать просто номера релизов.
    Ответ написан
    3 комментария
  • Как восстановить файлы после reset --hard?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Восстановить очень легко, так как гит ничего не удаляет из репозитория, по крайней мере сразу.
    Команда reset лишь переместила указатель ветки. Полностью удалить что-то крайне сложно.
    Вы можете посмотреть через git reflog где был указатель до этого и вернуть его туда обратно.
    git reset --hard HEAD@{1}
    Данная команда вернёт ветку на состояние, помеченное на вашем скрине как HEAD@{1}
    Либо можно скопировать непосредственно sha-хэш места, куда хотите вернуться.

    Затем повторить отмену последнего коммита, но уже правильно:
    git reset HEAD~1
    Такая команда не будет изменять рабочий каталог, а значит ничего из него не удалит.
    Ответ написан
    1 комментарий
  • С чего начать изучение Linux?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Ответ написан
    Комментировать
  • Как написать регулярное выражение для обработки разметки из ckeditor?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    1. Никогда не используйте регулярки для парсинга HTML
    2. Никогда не задавайте вопрос про свой вариант решения проблемы. Всегда задавайте вопрос про саму проблему.
    3. Htmlpurifier, HtmlSanitizer
    Ответ написан
    Комментировать
  • Для чего нужны Plugin Events понятным языком?

    vabka
    @vabka
    Токсичный шарпист
    Сейчас вопрос звучит примерно как
    У меня есть машина, и производитель этой машины напихал в салон кучу каких-то кнопок. Но мне не понятна суть дела. Зачем это всё? В каких случаях оно может понадобится и под какие типы задач (с конкретным примером, если можно)?


    Почему бы не спросить у этого разработчика?
    Почему бы не почитать документацию к этому плагину?
    Почему бы не почитать те самые объяснения, которые написаны в этих файлах?

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

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Это делается через приватный репозиторий, в который вы кладёте набор файлов, достаточный для работы и, например, дамп базы с тестовыми данными. А настоящего сайта фрилансер вообще касаться не должен.
    Ответ написан
    Комментировать
  • Как организовать поиск в БД с 1000 таблиц?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Даю совет: базу данных, в которой "есть очень много таблиц (>10.000), в каждой от 1 до 50 строк" нужно удалять, а того, кто её проектировал, увольнять с позором.
    Ответ написан
    4 комментария
  • Почему Windows 10 установленный через rufus - бесплатен?

    Mi11er
    @Mi11er
    A human...
    Перед тем, как такой вопрос закидывать, узнайте, чем отличается активированная Windows , от не активированной =)
    Потом все поймете.
    Ответ написан
    6 комментариев
  • Почему Windows 10 установленный через rufus - бесплатен?

    Stalker_RED
    @Stalker_RED
    Rufus - программа для создания загрузочных флешек. Ничего с ключами она не делает.

    У вас либо неактивировпнная винда, либо ключ подтягивается из биоса, либо сборка не оригинальная.
    Ответ написан
    1 комментарий
  • Почему Windows 10 установленный через rufus - бесплатен?

    @nApoBo3
    Не путайте технические ограничения и лицензирование. То, что программа не препятствует пиратству не делает ее лицензионной или бесплатной.
    Ответ написан
    2 комментария
  • Как грамотно сделать обработку ислючений в php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Структура проекта какая-то странная, в нем, судя по всему, контроллером называется роутер, но на этом я останавливаться не буду, обработка исключений от этого не зависит.

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

    Отсюда сразу становится понятно, что для функции, которая должна проверять введенные данные, наличие ошибок в них не является исключительной ситуацией. А совершенно штатной. И обеспечивается штатными же средствами. По результатам проверки пользователю просто отправляется ответ, что данные неверны, безо всяких исключений. В нормальной структуре проекта этим занимается контроллер.

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

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

    Пример такого исключения - когда запрос в БД порождает ошибку.

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

    Для информирования можно действительно ловить исключение через try..catch и писать какое-то свое сообщение.
    Но можно и автоматизировать этот процесс, вот две статьи, которые показывают примеры, как это можно сделать:
    https://angelovdejan.me/2022/11/24/centralized-exc...
    https://habr.com/ru/articles/688202/
    Ответ написан
    Комментировать