PHP Portal | Программирование
4.85K subscribers
408 photos
20 videos
2 files
209 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для PHP-разработчика

Связь: @devmangx
Download Telegram
Одна из самых подробных и полезных шпаргалок для Backend-разработчиков на русском языке.

Всё, что нужно, собрано в одном месте: как устроен интернет, как работают ПК, базы данных, API, тестирование и куча всего ещё

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

👉 @PHPgx | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍95🔥2👀2
Начиная с Laravel 11, весь middleware, который мы хотим применить в нашем приложении, необходимо настраивать в файле bootstrap.php.

Если вы переходите с более старой версии Laravel, вот различные методы, которые вам нужно знать для работы с middleware в Laravel 11 и более поздних версиях.

Здорово, что новая структура включает в себя все эти возможности 👍

👉 @PHPgx | #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
URL vs URI vs URN — в чем разница?

🔹 URI (Uniform Resource Identifier)
URI — это строка символов, идентифицирующая ресурс по местоположению, имени или обоим параметрам. Это самый общий идентификатор. URL и URN являются подтипами URI.

🔹 URL (Uniform Resource Locator)
URL — это подтип URI, который указывает, как найти ресурс в сети. Он включает протокол (например, HTTPS), домен и часто путь. URL полностью описывает способ доступа к ресурсу. Например: https://example.com/path/to/resource. URL также может использоваться с другими протоколами, такими как FTP.

🔹 URN (Uniform Resource Name)
URN — это тоже подтип URI, но он идентифицирует ресурс по имени в рамках определенного пространства имен, а не по местоположению. Он использует схему urn. URN не может быть использован для нахождения ресурса. Это глобально уникальный идентификатор, который остается неизменным независимо от местоположения ресурса. Например, urn:isbn:0361450721 идентифицирует книгу по ее ISBN, который остается неизменным, даже если книга хранится в разных местах.

Проще говоря:

🔹URL — это URI, но не всякий URI является URL.
🔹URN — уникальные имена, URL — локаторы, URI объединяет оба типа.

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92
Поскольку в сериализуемом замыкании нельзя использовать $this, рассмотрите возможность вынесения колбэков Bus::batch, основанных на Closure, в отдельные вызываемые (callable) классы.

Этот подход:
🔹Избавляет от необходимости создавать локальные переменные для свойств $this, чтобы сделать их сериализуемыми.
🔹Делает код более чистым, разделяя ответственность.
🔹Переносит логику в отдельный тестируемый класс.

👉 @PHPgx | #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
Vito — это самохостимое веб-приложение для управления серверами и деплоя PHP-приложений.

Поддерживает управление базами данных, настройку файрвола, установку SSL-сертификатов и управление cron-заданиями.

👉 https://github.com/vitodeploy/vito

👉 @PHPgx | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
HTTP/2 vs HTTP/3 — В чем разница?

HTTP/1 появился в 1996 году, а уже в 1997 вышел HTTP/1.1.

Следующий крупный шаг произошел только спустя ~20 лет — в 2015 году был стандартизирован HTTP/2. А в 2022 году официально утвердили HTTP/3.

В чем разница?

HTTP/1.1
Постоянные соединения — повторное использование соединений вместо открытия новых
Потоковая передача (Chunked Transfer) — отправка данных частями вместо ожидания полного ответа
Улучшенное кеширование — заголовки для управления кешем и соединениями
Последовательные запросы — блокируют друг друга (HoL-блокировка на уровне запросов)
Требуется несколько соединений — браузеры открывали несколько TCP-соединений для скорости

HTTP/1.1 заложил фундаментальные механизмы, актуальные и сегодня.

HTTP/2
Мультиплексирование — несколько запросов в одном TCP-соединении
Сжатие заголовков (HPACK) — уменьшение накладных расходов
Приоритизация потоков — критически важные ресурсы загружаются первыми
HoL-блокировка — потерянный пакет блокирует все потоки

HTTP/2 оптимизировал TCP, но остался ограничен его архитектурой.

HTTP/3
Основан на QUIC (UDP) — больше нет узких мест TCP
Независимые потоки — потеря пакетов в одном потоке не мешает другим
Быстрые рукопожатия — транспорт и шифрование настраиваются за один шаг
Обязательное шифрование (TLS 1.3) — безопасность по умолчанию
Миграция соединений — стабильная работа при смене сети

Вывод: HTTP/2 оптимизировал TCP, но HTTP/3 меняет правила игры с QUIC — быстрее, надежнее и безопаснее по умолчанию.

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
👍142
При работе с загрузкой изображений в Laravel важно проверять их ширину и высоту.

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

Не проблема! Класс Rule в Laravel позволяет легко валидировать размеры изображения с понятным синтаксисом.

Вот пример кода 👆

👉 @PHPgx | #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Ищешь игры, которые помогут тебе выучить и практиковать SQL?

Попробуй SQL Noir — детективная игра по SQL

Пиши запросы, анализируй данные и раскрывай дела!

👉 Попробовать - https://www.sqlnoir.com/
👉 Исходники доступны на GitHub

👉 @PHPgx | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8😁1
😂

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
😁32👍2
Совет по Laravel: Неявное привязывание Enum = чистые и типобезопасные маршруты

Определите enum на основе строки, используйте его в качестве type hint в определении маршрута — и Laravel автоматически проверит сегменты маршрута, возвращая 404 для недопустимых значений.

Элегантно, просто, мощно ✌️

👉 @PHPgx | #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132👎2
Совет по Bug Bounty

Утечка страницы PHP Info.

Открытая страница PHP Info может раскрывать множество конфиденциальных данных — от настроек конфигурации до пользовательских сессионных куки.

Например, в сочетании с XSS это может привести к полному захвату учетной записи.

👉 @PHPgx | #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍122😁1
Хардкорная игра-тренажёр для PHP-разработчиков

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

Правило всего одно: нужно переписать функцию так, чтобы она вернула true.

С каждым уровнем сложность заданий растёт. Никаких объяснений и руководств, всё по хардкору

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
👍133
Совет по PHP: First-Class Callables

PHP 8.1 представил first-class callables, которые упрощают синтаксис, особенно при работе с коллекциями Laravel, где часто используются замыкания

👉 @PHPgx | #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥21
Знали ли вы, что PHP переподключается к Redis при каждом запросе?

В Laravel 12 появилась новая переменная окружения REDIS_PERSISTENT, которая позволяет сохранять соединения с Redis между запросами.

👉 @PHPgx | #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
16👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Большая актуальная базу бесплатных API, которая обновляется ежедневно

Тут собрано аж 363 бесплатных API на все случаи жизни: от игр и погоды до финансов и здоровья.

Алгоритмы присваивают рейтинг каждому API на основе надежности, частоты ошибок и времени отклика

Если API перестает работать или становится платным, он теряет рейтинг и удаляется с сайта

Переходите и смотрите сами: https://www.freepublicapis.com/

👉 @PHPgx | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132🔥2
Совет по Laravel Eloquent

Если вам нужно добавить условие в запрос на основе некоторого условия в PHP, используйте метод when() в Eloquent.

Вы предпочитаете A или B?

Код становится короче и удобнее для чейнинга с другими методами запроса, но... может быть, менее читаемым?

👉 @PHPgx | #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍153🔥3
Ещё один клёвый тренажёр+учебник по SQL

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

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

👉 https://sql-academy.org/ru/trainer

👉 @PHPgx | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3
Ваш файл laravel.log слишком большой? Трудно читать/искать нужную информацию?

ЧЕТЫРЕ возможных решения ☕️

РЕШЕНИЕ 1: Команды в терминале

Если нужно что-то найти ОДИН РАЗ, используйте одну из этих команд:
🔹tail -n 100 storage/logs/laravel.log – показать последние 100 строк
🔹tail -f storage/logs/laravel.log – потоковое обновление лога в реальном времени
🔹grep -i "error" storage/logs/laravel.log – поиск ошибок (без учета регистра)

РЕШЕНИЕ 2: Изменение режима логирования на "daily"

В файле .env установите:
LOG_CHANNEL=daily

Это заставит Laravel создавать новый лог-файл каждый день (например, laravel-2025-01-01.log).

РЕШЕНИЕ 3: Пакет Log Viewer

Пакет opcodesio/log-viewer предоставляет удобную панель для просмотра логов.

РЕШЕНИЕ 4: Внешние платные инструменты

Сервисы ОТСЛЕЖИВАНИЯ ОШИБОК, которые автоматически собирают и организуют ошибки:
🔹Sentry
🔹Bugsnag
🔹Flare

Сервисы ДЛЯ УПРАВЛЕНИЯ ЛОГАМИ:
🔹Papertrail
🔹Loggly
🔹LogDNA

Есть что-то, что вы бы добавили в этот список?

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🔥1
Laravel использует Cron\CronExpression для определения времени выполнения запланированных задач.

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

Вот как я использовал его, чтобы дать пользователям возможность создавать и запускать автоматические отчёты по расписанию

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🌭1
Пример HTTP-сервера на PHP с использованием файберов. Улучшенная версия

Статья показывает, как сделать быстрый HTTP-сервер на PHP с файберами и расширением ev, обходя ограничения socket_select() и добиваясь лучшей производительности

👉 Подробнее

➡️ @PHPgx | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
10
This media is not supported in your browser
VIEW IN TELEGRAM
Laravel Wayfinder

На той неделе команда Laravel выпустила новый инструмент — Wayfinder — в бета-версии:
https://github.com/laravel/wayfinder

Он генерирует TypeScript-функции, которые можно импортировать на фронтенде для ваших контроллеров и маршрутов

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥53