Задать вопрос
  • Стоит ли использовать файловый сервер в проекте?

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

    Но если уж мечтать, то я бы написал класс, который реализует все методы для работы с файлами на локальном диске
    После этого, если останется время и задор, то реализовал бы другой класс, для работы через облако.
    И унифицировал эти классы, написав для них интерфейс.
    При этом класс для работы с локальным диском придётся переделать, поскольку вылезут косяки неудачной абстракции.

    Почему не сначала интерфейс - просто потому что вы изначально не представляете себе все требуемые методы. Это будет видно только из практики.

    Таким образом вы и задачу решите оптимальным способом (локально), и опыт получите (причём в первую очередь в программировании), и гибкость добавите - если вдруг надо будет перейти на облако (причём не обязательно именно на это) то это будет проще сделать просто написав ещё один адаптер, но не трогая основной код
    Ответ написан
    3 комментария
  • Стоит ли использовать файловый сервер в проекте?

    @rPman
    Чем больше зависимостей, тем сложнее поддержка в будущем.

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

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

    Я настоятельно рекомендую не городить лишних сущностей и хранить файлы на том же веб сервере как статические. Если нужны ограничения доступа, то используй штатные инструменты авторизации веб сервера либо свой велосипед. Это 10-15 строк кода, например файлы изначально хранятся в не опубликованном каталоге, а при предоставлении доступа к файлу в публичном создается симлинк, в имени которого id сессии (например id_сессии/id_файла причем если доступ сразу ко всем файлам, то достаточно линка на каталог по id_сессии), а при отзыве доступа, удаляются все симлинки с указанным id сессии.

    Бонусом получаешь максимально ресурсоэффективный способ хранения и публикации файлов, минусом наверное только свой uploader писать (в наше время начинающие разработчики просто обязаны пройти через написание своих велосипедов типа upload файла, обслуживание очереди задач по времени и т.п. иначе такое городят, смотреть на этот кошмар невозможно)
    Ответ написан
    5 комментариев
  • Стоит ли использовать файловый сервер в проекте?

    @Drno
    а webdav чем плох?
    Minio это s3, сегодня масштабироваться не хотят, завтра захотят...
    Ответ написан
    6 комментариев
  • В какой контейнер ставить сертификат Lent`Encrypt в NGINX-front или NGINX-backend?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Во первых для вашего определения того, что вы называете "фронт" есть официальный термин - реверс прокси.
    И конечно же сертификаты должны быть на нем.
    Ответ написан
    Комментировать
  • Можно ли настроить запросы к php через вебсокет и http одновременно?

    3. Вебсокет и unix сокет - это совершенно разные вещи. Websockets - это протокол обмена информацией по TCP/IP.
    Как работают websockets:
    - Клиент начинает с простого HTTP запроса с просьбой апгрейднуться до websockets.
    - Сервер соглашается, и тогда между Клиентом и Сервером устанавливается постоянное TCP/IP соединение, по которому данные могут ходить туда-обратно по протоколу websockets уже без кучи церемониальных ритуалов, как принято в обычном HTTP.

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

    2. Что можно использовать:
    - Ratchet
    - Swoole / OpenSwoole
    - Workerman

    У каждой из этих асинхронных библиотек/фреймворков есть свои особенности и нюансы. Но это всё очень хорошо описано в их документации, так что просто следуйте тому, что там написано, и не волнуйтесь. Советовать что-то одно не буду, потому что на вкус и цвет все фломастеры разные, и выберете то, что будет отвечать вашим конкретным задачам.
    Ответ написан
  • Можно ли настроить запросы к php через вебсокет и http одновременно?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Разумеется можно. Никаких нюансов в одновременной работе нет, поскольку тут нет никакой "одновременности". php-fpm и websocket - это два разных сервиса, которые могут располагаться на одном и том же сервере или на разных, но в любом случае никак не пересекаются. В добавление к текущему веб-серверу вы просто запускаете вебсокет сервер и посылаете на него вебсокет запросы из браузера.

    Ну то есть вам всего лишь надо осознать, что никакой одновременности нет, а дальше просто поставить вебсокет сервер, например workerman, и написать код, который по запросу будет соединяться с БД, получать нужную инфу и отправлять клиенту.

    1. Да.
    2. Как говорилось выше - можно. Любой сервер в сети по определению обеспечивает работу множества сервисов, количество которых ограничено только количеством свободных портов. Можно поставить два веб-сервера и пять вебсокет серверов.
    3. Нет, разумеется. unix сокет это как раз внутренняя кухня сервера, но мы же говорим о сетевом взаимодействии. А tcp взаимодействие nginx и php-fpm тут вообще не при чём.
    Ответ написан
    8 комментариев
  • Можно ли настроить запросы к php через вебсокет и http одновременно?

    @rPman
    Да, подходит.

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

    Для этого приложение на php нужно реализовывать в виде http сервера (готовых библиотек тьма, включая штатные расширения), рекомендуется использовать swoole ну или по старинке на сокетах (библиотеки phpreact)
    Ответ написан
    4 комментария
  • Можно как то улучшить сигнал мобильного интернета где работают глушилки?

    @Drno
    Возможно причина более банальна - БС оператора перегружена из-за наплыва людей
    как вариант лично мне помогла банальная смена оператора
    Ответ написан
    1 комментарий
  • Можно как то улучшить сигнал мобильного интернета где работают глушилки?

    @Oslik-ia
    Скорее всего, это не глушилки. Базовая станция изначально была рассчитана на одно количество устройств(допустим, 1000), а стало в несколько раз больше. Раньше в таких случаях помогал принудительное перевод модема на режим 3g, так как основная масса устройств сидит на частотах 4g.
    Ответ написан
    3 комментария
  • Можно как то улучшить сигнал мобильного интернета где работают глушилки?

    hint000
    @hint000
    у админа три руки
    Нужна антенна в форме тарелки (иногда в форме сетчатой тарелки), чтобы вы могли направить эту тарелку точно в сторону вышки. Это называется "остронаправленная антенна", так и надо гуглить. Бывает и в форме горизонтального стержня с несколькими короткими поперечинами на нём (Yagi), тоже вариант (меньше подвержен ветру и снегу, чем тарелка), но по усилению тарелка всех уделает, если её правильно установить. Суть в том, что сигнал хорошо ловится только с одного направления. Если глушилка где-то в стороне, то сигнал глушилки будет ловиться такой антенной слабо.

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

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Если кратко и упрощённо: разве что можно попробовать более дорой девайс с более чувствительным приёмником, более мощным передатчиком и более узконаправленной антенной, а так же более качественными усилителем и фильтрами помех. Топ - усилитель непосредственно в антенне, а из него уже идёт ethernet кабель в дом в роутер. Сделать что-то ещё вряд ли получится просто потому что мощность гражданских радиоустройств ограничена законодательно. А у военных устройств - нет. Так что глушиться будет всё равно: более дорогой девайс может лучше поймает сигнал, а может нет. Ну и более чувствительный приёмник точно так же и помехи поймает лучше.
    Ответ написан
    4 комментария
  • Как выполнять отладку на php?

    colonel
    @colonel
    Разработчик PHP, Laravel
    Ответ написан
    Комментировать
  • Как правильно в Symfony десериализовать Request в DTO, а последний потом в сущность?

    Как человек, который в своё время так переусложнял код, что потом сам не понимал, что и где в проекте происходит, посоветую вам использовать самый лучший принцип на свете - "KISS"

    Поэтому, ничего сложного пока не выдумывайте, поверьте, вы всегда сможете потом всё усложнить)))

    Я бы сделал так:

    • В контроллере сериализуем JSON в DTO ( можно вообще вот так https://symfony.com/blog/new-in-symfony-6-3-mappin... )
    • Далее создаёс сервис, который будет нашим маппером, и который будет иметь 2 метода "fromDtoToEntity" и "fromEntityToDto", и он будет заниматься всеми преобразованиями туда-сюда.
    • В этом маппере пишем наитупейшую логику, как вы и писали $user-setAge($DTO->getAge());
    • Отдаём клиенту ответ из контроллера


    Этот вариант максимально прозрачен и сильно сэкономит вам время при дебаге, потому что вы в два клика сможете найти всю логику.
    Ответ написан
    9 комментариев
  • Как получить доступ из docker контейнера к mysql на localhost?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Дело в том, что у каждого контейнера внутри свой loopback интерфейс с IP 127.0.0.1

    Есть два пути, чтобы добиться желаемого.

    Первый, убрать изоляцию с сети (network_mode: host), тогда всё просто заработает, но так делать не надо потому что на проде тебе никто не позволит так делать.

    Второй, надо заставить MySQL слушать либо на 0.0.0.0 (то есть на всех интерфейсах) и подключаться к ней из контейнера по IP шлюза (его можно посмотреть в выводе docker inspect <container_name>), либо заставить MySQL слушать именно на одном IP который является шлюзом для контейнера.
    Ответ написан
    2 комментария
  • Почему сайты отказываются от GET параметров на станицах?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Человечество развивается, люди становятся умнее, начинают наконец понимать стандарты. Ну, кроме разработчиков битрикса, конечно.
    Ответ написан
    Комментировать
  • Как перехватить исключение выбрасываемое из-за несуществующего метода объекта?

    @MaLuTkA_UA
    Для подобных целей существует функция method_exists.

    Ваш вариант хоть и рабочий но очень дорогой по ресурсам сервера.
    Ответ написан
    1 комментарий
  • Как произвести валидацию JWT токена с помощью public.key?

    И вообще, что проверяется публичным ключок - сам токен или его подпись.

    Подпись в самом JWT (JWS).

    при ее валидности потом декодируется вручную payload токена и вычисляется по меткам времени его валидность

    Всё верно.

    где лучше производить валидацию токена в случае SPA приложения: на фронтенде при каждом запросе к серверу, либо же на бэкэенде получаю при каждом запросе access_token с фронта?

    На сервере, куда делаются защищённые запросы, естественно. Валидировать токен на фронте бесполезно, а отсутствие валидации на сервере означает, что сервер будет не защищён. Любой злоумышленник сможет авторизоваться под любым пользователем отправив свой JWT.

    Единственное, что стоит проверять на фронте, это срок действия токена. Если он истёк, нужно получить новый токен.
    Ответ написан
    3 комментария
  • Почему при генерации pdf изображения в документ вставляются только в base64 кодировке?

    demon416nds
    @demon416nds
    Разработчик на чем попало
    Потому что библиотека не может скачивать изображения по ссылкам. Изображения же в base64 встроены в страницу и не требуют скачивания
    Ответ написан
    3 комментария
  • 128 символов когда их всего 95?

    vfreelancer
    @vfreelancer
    php
    В отличие от strlen(), iconv_strlen() учитывает кодировку строки. Длина string не обязательно будет соответствовать количеству байт в ней, так как в различных кодировках различные символы кодируются различным количеством байт, например, юникод может быть и двух-, и четырёхбайтным.

    попробуйте mb_substr с указанием кодировки
    Ответ написан