Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.6K subscribers
885 photos
6 videos
26 files
3.57K links
Все самое полезное для пхпшника в одном канале.

Список наших каналов: https://t.me/proglibrary/9197
Учиться у нас: https://proglib.io/w/bca892d6

Обратная связь: @proglibrary_feedback_bot

По рекламе: @proglib_adv
Прайс: @proglib_advertising
Download Telegram
Git Notes

Здесь рассказано о том, как можно использовать малозаметную, но полезную функцию Git — Git Notes — для добавления дополнительной информации к коммитам после их создания. В отличие от стандартных коммитов, которые создают новые объекты при изменении данных (например, при изменении сообщения коммита), Git Notes позволяют прикрепить к существующему коммиту дополнительную информацию, не меняя его.

Git Notes позволяют добавить различные заметки к коммиту с помощью команды git notes add. Эти заметки хранятся в отдельной ветке notes/commits и могут быть сгруппированы по категориям через флаг --ref. Например, можно создать разные типы заметок для одного и того же коммита — заметки, связанные с проверкой качества или тестированием кода.

Функционал Git Notes особенно полезен в таких случаях, как хранение обсуждений и комментариев к pull request'ам (PR). В проекте Symfony используют специальный инструмент для объединения веток, который автоматически сохраняет комментарии из GitHub в виде заметок Git Notes. Эти комментарии прикрепляются к коммитам, что позволяет отслеживать обсуждения даже после смены платформы или удаления исходного PR. Таким образом, при необходимости можно получить доступ к обсуждению, сохранив его вместе с кодом.

Для того чтобы просмотреть или извлечь эти заметки, можно использовать команду git log --notes или настраивать git fetch, чтобы автоматически загружать заметки с сервера.
🟢Вы можете запланировать работу ежедневно во многих различных структурах.

Вы можете запланировать выполнение команды artisan, класса Job, вызываемого класса, функции обратного вызова и даже выполнить сценарий оболочки.
Что такое Path Traversal?

Path Traversal в PHP — это уязвимость безопасности, при которой злоумышленник может попытаться получить доступ к файлам или директориям за пределами предназначенной области. Это может произойти, если приложение неправильно обрабатывает пользовательский ввод в пути файлов.

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

Для предотвращения атак Path Traversal важно правильно обрабатывать и валидировать пользовательский ввод, особенно при работе с файловой системой. Рекомендуется использовать абсолютные пути и проверять, что запрошенные ресурсы находятся в пределах ожидаемой области файловой структуры. Также полезно ограничивать права доступа к файлам и директориям на сервере.

#вопросы_с_собеседований
Выбор библиотеки PHP на основе производительности

Здесь обсуждается выбор библиотек для распознавания веб-сканеров (краулеров) в PHP с акцентом на их производительность в приложении Shopware. Рассматриваются три варианта: встроенная функция PHP get_browser, а также специализированные библиотеки jaybizzle/crawler-detect и matomo/device-detector.

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

Обе специализированные библиотеки показали схожую производительность с разницей в 12%: crawler-detect выполнилась за 767 мс, а device-detector — за 685 мс. Однако, при тестировании на одиночных запросах (один HTTP-заголовок), matomo/device-detector оказалась в 10 раз медленнее из-за инициализации регулярных выражений, что добавляет около 18 мс к каждому запросу. В то же время jaybizzle/crawler-detect генерирует регулярные выражения на этапе сборки, что позволяет обрабатывать запросы быстрее.

В итоге, для задачи определения краулера по одному запросу лучше подходит библиотека jaybizzle/crawler-detect с задержкой в 2 мс. matomo/device-detector, несмотря на её относительную медлительность в данном случае, может быть полезной для анализа большого количества запросов в фоновом режиме, где скорость работы с одиночными запросами не столь критична.
19 важных советов по оптимизации производительности Laravel

В этой статье рассмотрятся 19 советов, которые могут значительно повысить производительность вашего приложения Laravel
#дайджест #phpdevjob

Вакансии PHP разработчиков уровня Junior

▪️Backend разработчик
Москва. Д-проджект — веб разработка и сопровождение
Подробнее

▪️PHP-программист
Новосибирск. Intelsib — поисковое продвижение, контекстная реклама
Подробнее

Вакансии PHP разработчиков уровня Middle

▪️Fullstack разработчик
Казань. Майхит — управление отопительными котлами и инженерным оборудованием
Подробнее

▪️PHP developer
Удаленка. ТВИЛ СОФТ — разработка ПО
Подробнее

Вакансии PHP разработчиков уровня Senior

▪️PHP-developer
Екатеринбург. МЕДИАТЕН — разработка ПО
Подробнее

▪️Web-программист
Москва. Элитс — интернет-бутик брендовой одежды
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
#хочу_спросить

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

Хэш-функция в PHP — это алгоритм, который принимает входные данные (например, строку или файл) и возвращает фиксированный набор символов, который обычно представляет собой строку фиксированной длины. Результат, полученный от хэш-функции, обычно называют хэшем или хэш-значением.

Основные характеристики хэш-функций:

Фиксированная длина вывода: Хэш-функции возвращают хэш с постоянной длиной, независимо от размера входных данных.

Эффективность: Для любых входных данных вычисление хэш-функции должно быть быстрым.

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

В PHP существует множество хэш-функций, таких как MD5, SHA-1, SHA-256, SHA-512 и др. Они широко используются в различных областях программирования:

1️⃣Хранение паролей: Хэш-функции часто используются для хранения паролей пользователей в базах данных. Вместо хранения самих паролей, системы хранят их хэши. При проверке пароля введенного пользователем, система хэширует введенный пароль и сравнивает его с сохраненным хэшем.

2️⃣Цифровые подписи и проверка целостности данных: Хэш-функции используются для создания цифровых подписей и проверки целостности данных. Например, в криптографических протоколах, таких как HMAC (Hash-based Message Authentication Code).

3️⃣Контроль целостности файлов: Хэш-функции позволяют проверить, не были ли изменены файлы. Путем сохранения хэшей файлов и их сравнения в последующем, можно обнаружить любые изменения.

4️⃣Хэширование данных в хранилищах и поисковых индексах: Хэш-функции используются для быстрого поиска и сравнения данных, таких как в хэш-таблицах.

Важно отметить, что для хэширования паролей в PHP рекомендуется использовать функцию password_hash(), которая обеспечивает дополнительные меры безопасности. Избегайте использования устаревших хэш-функций, таких как MD5 и SHA-1, в критических сценариях, так как они считаются небезопасными.

#вопросы_с_собеседований
Высокочастотные метрики в PHP с TCP-сокетами

Здесь описывается решение для высокочастотного логирования в среде с большим количеством запросов на сервере, использующем PHP. В статье объясняется, как отслеживать метрики производительности, такие как API и запросы к базе данных, с минимальным влиянием на работу системы.

Структура логирования: Приводится стандартизированная запись логов, где указывается название метрики, тип, значение и продолжительность выполнения.

Примеры логирования:

🔸API-запросы.
🔸SQL-запросы.
🔸Логирование файла и строки вызова через debug_backtrace.

Логирование через TCP сокет:
Предпочтительно отправлять логи напрямую в агрегатор через TCP-сокет, а не сохранять их. Используется формат NDJSON для передачи данных, а метрики агрегируются с помощью инструментов, таких как Prometheus.

Минимизация нагрузки: Описаны методы минимизации влияния логирования на систему:

✔️Логирование должно потреблять минимальные ресурсы (RAM, CPU, диск, сеть).
✔️Логирование можно включать/выключать без перезагрузки сервера.
✔️Логирование должно корректно работать даже в случае недоступности сервера для логов.

Метод обработки трех возможных состояний TCP-порта: Порт может быть открыт, закрыт или заблокирован брандмауэром, и система должна обрабатывать эти случаи без блокировки приложения.
⭐️ Вы можете использовать readStream и writeStream, чтобы скопировать файл (или все файлы из папки) с одного диска на другой, сохраняя низкое использование памяти.
Привет, друзья! 👋

Мы хотим обсудить важную тему — токсичность в среде разработчиков и значимость поддержки и наставничества. Нам интересно узнать ваше мнение и опыт! Поделитесь своими мыслями, и самые полезные советы мы включим в нашу статью. Вот несколько вопросов для вас:

🤔 Приходилось ли вам сталкиваться с токсичными коллегами на работе? Как вы справлялись с этой ситуацией?
🌟 Какие качества вы считаете важными для хорошего наставника в IT-сфере?
💡 Какие советы вы бы дали тем, кто хочет создать более поддерживающую и позитивную рабочую атмосферу?
Спасибо за ваше участие! Ваши ответы помогут сделать рабочую среду лучше для всех. 🚀
⚙️ Подпишись на нашу еженедельную email-рассылку, чтобы быть в курсе последних открытий и тенденций в мире бэкенда.

В еженедельных письмах ты найдешь:
● Языки программирования и фреймворки для бэкенда
● Архитектура и проектирование серверных приложений
● Базы данных и управление данными
● Безопасность и защита данных
● Облачные технологии и DevOps
● API и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования

👉Подписаться👈
💡 Зачем использовать distributed lock: на заметку разработчику

Распределённая блокировка (distributed locking) — это метод координации доступа к общим ресурсам между несколькими процессами или узлами в распределённой системе.

👉 Источник
#дайджест новостей по PHP за неделю:

🔎PHP 8.4.0 RC 1 теперь доступен для тестирования — Команда PHP рада объявить о выпуске PHP 8.4.0, RC 1. Это первый релиз-кандидат, продолжающий цикл выпуска PHP 8.4, примерный план которого указан в PHP Wiki.

🔎Выпущены PHP 8.1.30, PHP 8.2.24 и PHP 8.3.12 — Команда разработчиков PHP объявляет о скором выходе PHP 8.1.30, PHP 8.2.24 и PHP 8.3.12. Это релиз безопасности.

🔎Laravel MongoDB выпускает версию 5.0

🔎Выпущен CakePHP 4.5.7 — Улучшения: Добавлены аннотации для mixin и template в классы Association. Исправление того, что BehaviorRegistry::unload() не отсоединял методы camelCase.

🔎Неделя Symfony #926 (23-29 сентября 2024 года) — На этой неделе в грядущей версии Symfony 7.2 были добавлены такие новые возможности, как поддержка определения доверенных хостов и заголовков с помощью env vars, улучшение команды debug:asset-mapper для поиска и фильтрации активов, а также разрешение парсерам запросов возвращать несколько RemoteEvent в веб-хуках.