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

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
А был ли баг? Может бага и не было? Зачем, как и чем тестировать PHP код

В статье рассматриваются основные подходы к тестированию бэкенда на PHP, обсуждаются преимущества и проблемы, связанные с этим процессом. Также о методах обнаружения и устранения багов, инструментах и книгах для более глубокого изучения тестирования. Материал будет полезен как начинающим тестировщикам, так и разработчикам, которые хотят освоить тестирование бэкенда, но не знают с чего начать.
👍4🥱4
Resonance — новый PHP-фреймворк, созданный на основе Swoole

Здесь представлен новый PHP-фреймворк под названием Resonance, который ориентирован на асинхронное программирование и включает в себя функции Fibers, Coroutines и библиотеку Swoole. Фреймворк позволяет создавать модульные приложения, где все компоненты могут легко заменяться, расширяться или модифицироваться. Проект бесплатный и open source, с документацией и исходным кодом доступными на GitHub. Автор приглашает присоединиться к сообществу и оценить проект на GitHub.
👍125👾1
Борьба с Login CSRF

Статья обсуждает уязвимости Cross-Site Request Forgery (CSRF) в веб-приложениях, фокусируясь на менее известном типе — Login CSRF. CSRF эксплуатирует функционал сеансов в браузере, позволяя злоумышленникам выполнять неавторизованные запросы с использованием сеанса пользователя. В традиционной атаке CSRF злоумышленник может манипулировать пользователем для выполнения действий от их имени, таких как изменение пароля или проведение транзакций.

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

Автор предоставляет рекомендации по защите от Login CSRF в Symfony, фреймворке веб-приложений. Рекомендуемый подход включает в себя включение защиты CSRF в конфигурации аутентификации и внедрение случайного токена в форму входа, который может быть автоматизирован аутентификатором form_login Symfony. Для более старых версий Symfony предлагается использовать csrf_token_generator.

Защита распространяется также на выход, с использованием опции enable_csrf в конфигурации logout. Статья завершается акцентом на важности обеспечения защиты действий входа и выхода от атак CSRF, даже при наличии улучшенных мер безопасности куки.
🥱8👍61
Что такое ACID?

ACID — это аббревиатура, обозначающая четыре основных характеристики транзакций в базах данных: атомарность (Atomicity), согласованность (Consistency), изолированность (Isolation) и долговечность (Durability).

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

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

3. Изолированность обеспечивает, что каждая транзакция выполняется в изолированной среде, рассматривающей ее как единственную выполняющуюся транзакцию. Это гарантирует, что результаты одной транзакции не будут видны другим транзакциям, пока они не будут успешно завершены.

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

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

#вопросы_с_собеседований
👍8🥱5💯1
Декодинг функций пустых значений PHP: когда какие использовать

Эта статья объясняет различия между оператором ! (не), функцией is_null(), isset() и функцией empty() в PHP при проверке наличия пустых значений. Вот краткое изложение ключевых моментов:

1️⃣Оператор ! (не):

Проверяет, является ли значение false.
Считаются «ложными» значениями: false, 0, 0.0, '', массив с нулевым количеством элементов, NULL, объекты SimpleXML из пустых тегов.
Пример: if (!$value) { echo 'Значение считается пустым.'; }

2️⃣Функция is_null():

Проверяет, равна ли переменная NULL.
Возвращает true только если переменная именно NULL, не проверяя другие «пустые» значения.
Пример: if (is_null($value)) { echo 'Значение равно NULL.'; }

3️⃣Функция isset():

Проверяет, установлена ли переменная и не является ли она NULL.
Возвращает true для любого значения, отличного от NULL (включая false, 0, и пустую строку '').
Пример: if (isset($value)) { echo 'Переменная установлена и не равна NULL.'; }

4️⃣Функция empty():

Проверяет, считается ли переменная «пустой».
Считаются «пустыми» значения: '', 0, 0.0, «0», NULL, false, массив с нулевым количеством элементов.
Полезна при проверке наличия переменной и её непустого значения.
Пример: if (empty($value)) { echo 'Значение считается пустым по empty().'; }
Статья также предоставляет примеры использования каждой из функций для лучшего понимания их применения.
🔥9👍4🥱2👾1
Построение гибкой, но абстрактной структуры внешней интеграции

В статье описан процесс разработки интеграции Jira в приложение Flare, которое уже имело интеграцию с GitHub. Основное внимание уделяется созданию гибкой и абстрактной структуры, позволяющей легко добавлять новые интеграции в будущем и приводится три примера абстрагирования кода для различных интеграций.
👍6👾2
8 способов, с помощью которых Laravel поможет вам писать чистый и лаконичный код

В статье рассматриваются восемь методов, которые позволяют писать более компактный и чистый код в Laravel:

1️⃣Фасады (Facades):

Фасады предоставляют «статический» интерфейс к классам, доступным в контейнере служб приложения.
Позволяют обращаться к функционалу Laravel через интуитивно понятный синтаксис, например, Cache::get('foo').

2️⃣Неявное связывание (Implicit Binding):

Позволяет автоматически получать ресурсы из базы данных, указывая модель вместо явного запроса.
Пример: Route::get('/blog/{post}', [PostController::class, 'show']), где $post — это экземпляр модели Post.

3️⃣Автоматическое внедрение зависимостей:

Laravel может автоматически внедрять зависимости, например, объект запроса.
Просто указываем в методе контроллера store(Request $request), и Laravel предоставляет экземпляр запроса.

4️⃣Перенаправление маршрутов (Redirect Routes):

Использование метода Route::redirect('/old', '/new') для перенаправления существующих URL без создания целого контроллера.

5️⃣Просмотр маршрутов (View Routes):

Использование метода Route::view('/about', 'pages.about') для простой регистрации маршрута, возвращающего представление.

6️⃣Коллекции (Collections):

Laravel Collections предоставляют множество полезных методов для работы с массивами более эффективным и последовательным образом.

7️⃣Условный трейт (Conditional Trait):

Использование трейта Conditionable для более компактного и читаемого кода при условных проверках.

8️⃣Бесконечные пакеты первой стороны (Endless First Party Packages):

Использование обширной коллекции официальных и сторонних пакетов Laravel для решения распространенных задач.
9😁6🥱1
#дайджест #phpdevjob

Вакансии недели для Москвы 👨🏻‍🏫

Senior PHP разработчик в Торговая компания
Москва. Высоконагруженный маркетплейс.
Подробнее

Программист в Университет искусственного интеллекта
Москва. Образование в сфере AI.
Подробнее

Senior PHP-разработчик в EdgeQ
Москва. Web & Mobile разработка полного цикла.
Подробнее

PHP-разработчик в ЛАБИРИНТ
Москва. Книжный холдинг.
Подробнее

Программист PHP в OOMI
Москва. Комплексный маркетинг, WEB разработка и аутсорсинг.
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
🤔63
Какое самое лучшее решение вы когда-либо принимали в отношении своей работы/рабочего процесса?⬇️
🥱102👍1
Последнее слово об «unfinalize»

Автор создал запрос на объединение в PHP-CS-Fixer, чтобы предотвратить установку stevebauman/unfinalize вместе с friendsofphp/php-cs-fixer. Это вызвало оживленные обсуждения в сообществе PHP относительно использования ключевого слова «final» в коде. Запрос на объединение был воспринят как полушутка, направленная на предотвращение интеграции инструмента unfinalize с PHP-CS-Fixer.

Драма разгорелась, когда запрос на объединение был принят, и unfinalize был заблокирован в PHP-CS-Fixer. Автор столкнулся с критикой и дизлайками со стороны сообщества, что привело к отмене запроса на объединение. Он аргументировал, что модификация вендорного кода не является стандартом кодирования, и высказал опасения относительно потенциального вреда от разрешения запрещенного наследования.

В статье обсуждаются причины запроса на объединение, включая убеждение в том, что «final by default» — хороший подход, и что unfinalize может быть вредным для пользователей. Автор также рассматривает контраргументы, такие как существование Composer patches и dg/bypass-finals.
👍10
This media is not supported in the widget
VIEW IN TELEGRAM
🥱18👍8🌚32👏2
Что такое type hinting, как работает, зачем нужен?

Type hinting в PHP — это возможность указывать ожидаемые или допустимые типы данных для параметров функций и функций-обратного вызова (callback). Он используется для определения типов аргументов функций и возвращаемых значений.

Type hinting выполняется при помощи объявления типа данных перед именем параметра функции или функции-обратного вызова.

В данном случае мы указываем, что параметры $a и $b должны быть целочисленного типа (int), а функция должна возвращать тоже целочисленное значение. Если будет передан несоответствующий тип данных, то PHP выдаст ошибку.

Type hinting в PHP имеет следующие преимущества и цели:

1. Увеличение надежности и безопасности кода: Type hinting позволяет контролировать типы данных, которые принимаются и возвращаются функциями, что может помочь предотвратить ошибки типизации и некорректное использование функций.

2. Улучшение понимания кода: Type hinting делает код более читаемым и понятным, особенно при работе в команде. Видя ожидаемые типы данных в объявлениях функций, другие разработчики легко могут понять, какие данные ожидаются для правильного использования функции.

3. Интеграция со средами разработки: Многие среды разработки, такие как PhpStorm, могут использовать информацию о типах данных для предоставления подсказок и автодополнения, что упрощает разработку и ускоряет процесс написания кода.

Однако, следует отметить, что type hinting в PHP не является строгой типизацией. Если передать аргумент, не соответствующий указанному типу, PHP будет пытаться выполнить приведение типов, что может привести к непредсказуемому поведению программы.

#вопросы_с_собеседований
🥱8👍5
Kubernates и Laravel: Начало работы

Статья предоставляет введение в Kubernetes, охватывая основные концепции и объясняя ключевые компоненты, такие как узлы, кластеры, пулы узлов, поды, наборы реплик, деплойменты, сервисы, ингрессы и пространства имен. Затем описывается конфигурация Pod, ReplicaSet и Deployment в Kubernetes, с акцентом на механизмы меток и селекторов.

Автор также рассматривает создание кластера Kubernetes с использованием DigitalOcean и командной строки kubectl. Управляемые базы данных представляются в качестве решения для обработки состояний в приложениях внутри кластера Kubernetes.

Далее в статье идет речь о развертывании Laravel API в Kubernetes, охватываются темы, такие как ConfigMaps и Secrets для управления переменными окружения. Приводятся подробные шаги по созданию и применению конфигураций деплоймента, а также проверке статуса подов и просмотру журналов.

Затем объясняется развертывание nginx в Kubernetes вместе с настройкой коммуникации между nginx и Laravel API с использованием сервисов типа ClusterIP. Демонстрируется использование команд kubectl для взаимодействия с кластером и тестирования конфигураций.
👍7
Из чего состоят карьерные сайты: топ-5 фич и 4 месяца разработки

Здесь рассказывается о растущем спросе на IT-специалистов в России за последние два года и о том, как многие компании начали активно создавать карьерные сайты для эффективного подбора персонала.

Автор описывает свой опыт работы над карьерными сайтами для крупных компаний с активным IT-подбором.
Как часто вы ездите в офис? Сколько раз в неделю?⬇️
🌚13👍2🥱2🤔1
Новые сообщения об ошибках в PHP 8.3

Предстоящая версия PHP 8.3 вводит 38 новых сообщений об ошибках, удаляя при этом 11. Количество уникальных сообщений об ошибках составляет 783, что ставит PHP 8.3 на четвёртое место, обогнав PHP 8.2, но всё ещё уступая PHP 7.4. Сообщения об ошибках обычно накапливаются в пределах основной версии PHP до следующей версии с изменениями, где они удаляются.

Некоторые из новых интересных сообщений об ошибках в PHP 8.3 включают:

1️⃣Устаревшее использование get_class() и get_parent_class() без аргументов. Теперь аргументы обязательны, и рекомендуется использовать $this внутри класса.
2️⃣Ошибка при использовании неподходящего значения для типизированной константы класса.
3️⃣Ограничение возможных типов для констант класса, исключая такие типы, как never, void и callable.
4️⃣Запрет некоторых модификаторов для элементов класса, таких как abstract, static, public, final и т. д.
5️⃣Устаревшее увеличение неалфавитных строк с рекомендацией использовать специализированные функции, такие как str_increment().
6️⃣Введение конкретных сообщений об ошибках для операций декремента с пустыми строками, нечисловыми строками, булевыми и null-типами.
7️⃣Предупреждение о попытке операций инкремента или декремента для булевых значений.
8️⃣Ошибка линтинга для дублирования объявлений статических переменных в замыканиях.
👍102
Forwarded from Библиотека программиста | программирование, кодинг, разработка
Подборка лучших статей «Библиотеки программиста» за октябрь: сохраняй в заметки, чтобы не пропустить #самыйсок

📊 Эффективная работа с JSON в Go
🔝 Лучшие практики Go: путь к чистому коду
📚 ТОП-8 книг по DevOps в 2023 году
💪 6 сервисов для подготовки к техническим собеседованиям
🗺️ Карьерная карта: что это, как ее составить и почему она обязательно нужна разработчику
🛡️ 8 способов защиты от манипуляций на работе
👩‍💻 Женщины в ИТ: проблемы и преимущества сложной профессии
🤖 8 лучших бесплатных курсов по ИИ и глубокому обучению
👨‍💻 9 трендов в найме айтишников в 2023 году
🤔 9 мифов об IT и найме айтишников
🤖 25 бесплатных AI-инструментов для разработчиков
☁️ ТОП-10 бессерверных фреймворков
🚩 Итог одной валютной удаленки: проработал месяц бесплатно и ушел с долгами
💻 20 лучших ноутбуков для программиста в 2023 году
🧠 Как научиться критически мыслить: 6 эффективных способов
Результаты ежегодного опроса разработчиков StackOverflow: 20+ главных инсайтов 2023 года
1🔥1🥱1