mlocati/php-extension-installer
Полезная утилита, которая решает вечную боль сборки PHP-образов.
Позволяет ставить расширения одной строчкой, без
Работает с Alpine и с Debian.
Сам подтягивает системные зависимости, поддерживает PECL-пакеты и умеет кэшировать слои.
По сути — "composer install" для PHP-расширений.
https://github.com/mlocati/docker-php-extension-installer
Сравни, как было бы без него:
🚀 Пост Guru PHP: @msavin_dev
Полезная утилита, которая решает вечную боль сборки PHP-образов.
Позволяет ставить расширения одной строчкой, без
apt, apk и docker-php-ext-install.
FROM php:8.3-fpm
# Подтягиваем готовый установщик расширений из образа mlocati
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
# Одной командой ставим всё нужное
RUN set -eux; \
install-php-extensions \
intl \
pdo_pgsql \
opcache \
gd \
redis \
xdebug
Работает с Alpine и с Debian.
Сам подтягивает системные зависимости, поддерживает PECL-пакеты и умеет кэшировать слои.
По сути — "composer install" для PHP-расширений.
https://github.com/mlocati/docker-php-extension-installer
Сравни, как было бы без него:
FROM php:8.3-fpm
# Системные зависимости для intl, pdo_pgsql, gd
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
libicu-dev \
libpq-dev \
libjpeg-dev \
libpng-dev \
libwebp-dev \
libfreetype6-dev \
pkg-config \
git \
ca-certificates; \
rm -rf /var/lib/apt/lists/*
# Конфигурация и сборка расширений из исходников
RUN set -eux; \
docker-php-ext-install -j"$(nproc)" \
gd \
intl \
pdo_pgsql \
opcache
# PECL-расширения
RUN set -eux; \
pecl install redis; \
pecl install xdebug; \
docker-php-ext-enable redis xdebug
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - mlocati/docker-php-extension-installer: Easily install PHP extensions in Docker containers
Easily install PHP extensions in Docker containers - mlocati/docker-php-extension-installer
❤1👍1🔥1
#Собес #route #web #api
🤔 Какие файлы маршрутов по умолчанию существуют в Laravel?
💬 Кратко:
В Laravel по умолчанию существуют четыре файла маршрутов:
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Какие файлы маршрутов по умолчанию существуют в Laravel?
💬 Кратко:
В Laravel по умолчанию существуют четыре файла маршрутов:
web.php для веб-маршрутов, api.php для API-маршрутов, console.php для команд консоли и channel.php для каналов вещания событий.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤1
#book #памятка
📚 Памятка PHP/GoLang разработчику для подготовки к собеседованиям
Это методичка(краткий справочник) по темам, знание которых может понадобиться при собеседовании на бэкендера (с уклоном в Golang/PHP) и на работе.
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Памятка PHP/GoLang разработчику для подготовки к собеседованиям
Это методичка(краткий справочник) по темам, знание которых может понадобиться при собеседовании на бэкендера (с уклоном в Golang/PHP) и на работе.
Перейти к материалу
👉 База вопросов 👉 Новости
❤1
#Собес #phpunit #unit #test
🤔 Как написать юнит-тесты в PHP?
💬 Кратко:
В PHP юнит-тесты пишутся с использованием PHPUnit, который позволяет проверять корректность работы кода. Для создания тестов необходимо создать класс с методами, проверяющими функциональность программы, и использовать различные утверждения для проверки результатов. PHPUnit поддерживает создание фиктивных объектов и наборов данных для тестирования различных сценариев.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как написать юнит-тесты в PHP?
💬 Кратко:
В PHP юнит-тесты пишутся с использованием PHPUnit, который позволяет проверять корректность работы кода. Для создания тестов необходимо создать класс с методами, проверяющими функциональность программы, и использовать различные утверждения для проверки результатов. PHPUnit поддерживает создание фиктивных объектов и наборов данных для тестирования различных сценариев.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤1
#Собес #transaction #deadlock #database
🤔 Как предотвратить взаимоблокировки в базе данных?
💬 Кратко:
Взаимоблокировки возникают, когда несколько транзакций блокируют друг друга, ожидая освобождения ресурсов. Чтобы их избежать, следует:
- Всегда обращаться к ресурсам базы данных в одном порядке.
- Сокращать время выполнения транзакций, чтобы уменьшить вероятность конфликта.
- Использовать таймауты для автоматического завершения зависших транзакций.
- Регулярно анализировать производительность базы данных и оптимизировать запросы, добавляя индексы и избегая сложных блокировок.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как предотвратить взаимоблокировки в базе данных?
💬 Кратко:
Взаимоблокировки возникают, когда несколько транзакций блокируют друг друга, ожидая освобождения ресурсов. Чтобы их избежать, следует:
- Всегда обращаться к ресурсам базы данных в одном порядке.
- Сокращать время выполнения транзакций, чтобы уменьшить вероятность конфликта.
- Использовать таймауты для автоматического завершения зависших транзакций.
- Регулярно анализировать производительность базы данных и оптимизировать запросы, добавляя индексы и избегая сложных блокировок.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
PHP-FPM status page
PHP-FPM может сам показать живую статистику по пулам и воркерам. Для этого нужно посетить страницу
Пример вывода:
Что это значит по-человечески:
* listen queue — сколько запросов ждут воркера.
* idle processes — свободные воркеры. Если всегда
* active processes — кто-то реально что-то делает.
* max children reached > 0 — пул упирался в лимит
* slow requests > 0 — смотри slowlog, код тормозит.
Как включить
В
В nginx добавь:
Перезапусти FPM и nginx, затем:
Можно и
А
📘 Документация: https://www.php.net/manual/en/fpm.status.php
🚀 Пост Guru PHP: @msavin_dev
PHP-FPM может сам показать живую статистику по пулам и воркерам. Для этого нужно посетить страницу
/fpm-statusПример вывода:
pool: www
process manager: dynamic
listen queue: 0
idle processes: 3
active processes: 2
max children reached: 0Что это значит по-человечески:
* listen queue — сколько запросов ждут воркера.
0 — отлично.* idle processes — свободные воркеры. Если всегда
0 — не хватает процессов.* active processes — кто-то реально что-то делает.
* max children reached > 0 — пул упирался в лимит
pm.max_children.* slow requests > 0 — смотри slowlog, код тормозит.
Как включить
В
www.conf (или другом пуле):pm.status_path = /fpm-status
ping.path = /ping
ping.response = pong
В nginx добавь:
location = /fpm-status {
include fastcgi_params;
fastcgi_pass unix:/run/php/php-fpm.sock;
allow 127.0.0.1; deny all;
}Перезапусти FPM и nginx, затем:
curl http://127.0.0.1/fpm-status
Можно и
?full — покажет все процессы с PID, временем работы и запросом. Также можно менять формат вывода статистикиА
/ping пригодится для health-check.📘 Документация: https://www.php.net/manual/en/fpm.status.php
Please open Telegram to view this post
VIEW IN TELEGRAM
www.php.net
PHP: Status Page - Manual
❤2🔥2
#Собес #transaction #pdo #mysql
🤔 Как выполнять транзакции в PHP с MySQL?
💬 Кратко:
Транзакции позволяют выполнять несколько запросов к базе данных как единое целое. Если один из запросов завершится неудачей, можно откатить изменения. В PHP транзакции реализуются через MySQLi или PDO, с использованием методов
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как выполнять транзакции в PHP с MySQL?
💬 Кратко:
Транзакции позволяют выполнять несколько запросов к базе данных как единое целое. Если один из запросов завершится неудачей, можно откатить изменения. В PHP транзакции реализуются через MySQLi или PDO, с использованием методов
beginTransaction, commit и rollBack.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
👍2
#Собес #ipsec #layer_3 #encryption
🤔 На каком уровне работает IPsec?
💬 Кратко:
IPsec работает на 3-м уровне модели OSI (сетевом уровне). Он обеспечивает защиту данных на уровне IP-пакетов с использованием методов шифрования и аутентификации.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 На каком уровне работает IPsec?
💬 Кратко:
IPsec работает на 3-м уровне модели OSI (сетевом уровне). Он обеспечивает защиту данных на уровне IP-пакетов с использованием методов шифрования и аутентификации.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#podcast #всё
📚 TeachMeSkills IT-школа
Это серия выпусков от "TeachMeSkills Школа программирования"
Речь пойдет об актуальные направления и технологии в IT; перспективы роста начинающих специалистов; холиварные топики из жизни разработчиков.
Перейти к материалу
👉 База вопросов 👉 Новости
📚 TeachMeSkills IT-школа
Это серия выпусков от "TeachMeSkills Школа программирования"
Речь пойдет об актуальные направления и технологии в IT; перспективы роста начинающих специалистов; холиварные топики из жизни разработчиков.
Перейти к материалу
👉 База вопросов 👉 Новости
#Собес #debugging #xdebug #logging
🤔 Как отлаживать PHP-приложение?
💬 Кратко:
Для отладки можно использовать встроенные функции PHP, такие как
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как отлаживать PHP-приложение?
💬 Кратко:
Для отладки можно использовать встроенные функции PHP, такие как
var_dump() и error_reporting(), а также более сложные инструменты вроде Xdebug для работы с точками останова и трассировками. Логирование ошибок и профилирование кода также играют ключевую роль.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤1
#Собес #register #boot #laravel
🤔 Что такое сервис-провайдеры в Laravel?
💬 Кратко:
Сервис-провайдеры в Laravel — это центральное место для конфигурации приложения и его сервисов. Они используются для регистрации и инстанцирования зависимостей и выполнения действий при старте приложения. Провайдеры содержат два ключевых метода:
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Что такое сервис-провайдеры в Laravel?
💬 Кратко:
Сервис-провайдеры в Laravel — это центральное место для конфигурации приложения и его сервисов. Они используются для регистрации и инстанцирования зависимостей и выполнения действий при старте приложения. Провайдеры содержат два ключевых метода:
register для регистрации сервисов и boot для выполнения кода после того, как все сервисы будут зарегистрированы.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#Собес #docker #entrypoint #caching
🤔 Какие типовые проблемы возникают при работе с Docker?
💬 Кратко:
Типичные проблемы — большие образы, утечки ресурсов, ошибки в Dockerfile, проблемы с кэшированием, конфликт портов, неправильная работа томов и зависимость от окружения. Также нередко возникают сложности с безопасностью.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Какие типовые проблемы возникают при работе с Docker?
💬 Кратко:
Типичные проблемы — большие образы, утечки ресурсов, ошибки в Dockerfile, проблемы с кэшированием, конфликт портов, неправильная работа томов и зависимость от окружения. Также нередко возникают сложности с безопасностью.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
❤1
#course #курсы #тренажер
📚 Code Basics — старт в IT с нуля
Code Basics — бесплатная образовательная платформа для тех, кто хочет начать путь в IT. Проект создан командой и сообществом Хекслета, чтобы помочь новичкам понять принципы программирования, а не просто запомнить детали. В основе обучения — практический тренажёр, который помогает освоить базу и почувствовать логику кода.
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Code Basics — старт в IT с нуля
Code Basics — бесплатная образовательная платформа для тех, кто хочет начать путь в IT. Проект создан командой и сообществом Хекслета, чтобы помочь новичкам понять принципы программирования, а не просто запомнить детали. В основе обучения — практический тренажёр, который помогает освоить базу и почувствовать логику кода.
Перейти к материалу
👉 База вопросов 👉 Новости
#Собес #authentication #password #hash
🤔 Как реализовать аутентификацию в PHP?
💬 Кратко:
Для реализации аутентификации в PHP обычно используется проверка имени пользователя и пароля. Пароли должны храниться в базе данных в зашифрованном виде (например, с использованием
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как реализовать аутентификацию в PHP?
💬 Кратко:
Для реализации аутентификации в PHP обычно используется проверка имени пользователя и пароля. Пароли должны храниться в базе данных в зашифрованном виде (например, с использованием
bcrypt). При успешной аутентификации создаётся сессия для отслеживания состояния пользователя. Важно использовать HTTPS для защиты данных, а также предусмотреть дополнительные методы безопасности, такие как двухфакторная аутентификация.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Функция array_column может доставать не только колонки массива, как казалось бы, но и свойства объектов:
А вы знали про такое?
🚀 Пост Guru PHP: @msavin_dev
enum Status: string {
case Active = 'active';
case Inactive = 'inactive';
case Pending = 'pending';
}
// What does self::cases() return?
var_dump(Status::cases());
// array(3) {
// [0]=> enum(Status::Active) // <- These are OBJECTS
// [1]=> enum(Status::Inactive) // <- Not arrays
// [2]=> enum(Status::Pending)
// }
// Each case object has public readonly properties:
$case = Status::Active;
echo $case->value; // "active" (string - the backing value)
// array_column can extract these properties!
$values = array_column(Status::cases(), 'value');
var_dump($values);
// array(3) {
// [0]=> string(6) "active"
// [1]=> string(8) "inactive"
// [2]=> string(7) "pending"
// }
А вы знали про такое?
Please open Telegram to view this post
VIEW IN TELEGRAM
www.php.net
PHP: array_column - Manual
Return the values from a single column in the input array
👍2
#Собес #postgres #sql #php
🤔 Middle PHP разработчик в Анлимитед Продакшн
Техническое собеседование. Вилка: от 165к. Собеседование с фокусом на архитектуру веб-приложений, принципы SOLID, работу с базами данных PostgreSQL и понимание основ безопасности API.
💬 Вопросы:
- Алгоритмы агрегации данных — как работает GROUP BY под капотом (на примере CSV-файла без БД)?
- Как обеспечить уникальность необязательного поля (например, рабочего телефона) с учётом NULL-значений?
- Что кэшировать, а что нет? Инвалидация кэша при изменении данных.
- Стратегии кэширования тяжёлых вычислений (например, поиска товаров с фильтрами) — cache-aside, проблема cold start.
- Как работает идемпотентность под капотом — где и как хранятся ключи, с чем сравнивается запрос?
👉 Все вопросы из этого собеседования (26)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Middle PHP разработчик в Анлимитед Продакшн
Техническое собеседование. Вилка: от 165к. Собеседование с фокусом на архитектуру веб-приложений, принципы SOLID, работу с базами данных PostgreSQL и понимание основ безопасности API.
💬 Вопросы:
- Алгоритмы агрегации данных — как работает GROUP BY под капотом (на примере CSV-файла без БД)?
- Как обеспечить уникальность необязательного поля (например, рабочего телефона) с учётом NULL-значений?
- Что кэшировать, а что нет? Инвалидация кэша при изменении данных.
- Стратегии кэширования тяжёлых вычислений (например, поиска товаров с фильтрами) — cache-aside, проблема cold start.
- Как работает идемпотентность под капотом — где и как хранятся ключи, с чем сравнивается запрос?
👉 Все вопросы из этого собеседования (26)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
#Собес #git_diff
🤔 Как посмотреть, что именно вы изменили в определенном файле git?
💬 Кратко:
Используйте команду
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как посмотреть, что именно вы изменили в определенном файле git?
💬 Кратко:
Используйте команду
git diff для просмотра изменений. Для конкретного файла:git diff <имя_файла>
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#documentation #http
📚 Все про HTTP
Тут собрано всё, что нужно знать про самый популярный протокол интернета
✓ Все статус-коды с понятными объяснениями
✓ Методы и заголовки
✓ Подборка инструментов для тестирования HTTP
✓ Чёткая инфа про HTTP/3
Перейти к материалу
👉 База вопросов 👉 Новости
📚 Все про HTTP
Тут собрано всё, что нужно знать про самый популярный протокол интернета
✓ Все статус-коды с понятными объяснениями
✓ Методы и заголовки
✓ Подборка инструментов для тестирования HTTP
✓ Чёткая инфа про HTTP/3
Перейти к материалу
👉 База вопросов 👉 Новости
#Собес #request #response #framework
🤔 Как обрабатывается веб-запрос в фреймворке (Laravel/Yii2) — от Nginx через PHP-FPM до контроллера и возврата JSON-ответа?
💬 Кратко:
Веб-запрос проходит через несколько уровней обработки. Сначала Nginx принимает запрос и передает его PHP-FPM через FastCGI протокол. PHP-FPM запускает PHP-процесс, который загружает фреймворк. Фреймворк анализирует маршрут, находит соответствующий контроллер и выполняет его метод. Контроллер обрабатывает данные и возвращает JSON-ответ, который проходит обратно через всю цепочку к клиенту.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🤔 Как обрабатывается веб-запрос в фреймворке (Laravel/Yii2) — от Nginx через PHP-FPM до контроллера и возврата JSON-ответа?
💬 Кратко:
Веб-запрос проходит через несколько уровней обработки. Сначала Nginx принимает запрос и передает его PHP-FPM через FastCGI протокол. PHP-FPM запускает PHP-процесс, который загружает фреймворк. Фреймворк анализирует маршрут, находит соответствующий контроллер и выполняет его метод. Контроллер обрабатывает данные и возвращает JSON-ответ, который проходит обратно через всю цепочку к клиенту.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
Оптимизация Docker-образов с помощью dive
Недавно прогнал наш dev-образ через утилиту dive
Судя по результатам, надо образ на диету садить)
На скрине видно что размер образа разожрался больше гига, можем походить по слоям, увидеть сколько каждый весит, куда он добавляет файлы (что довольно любопытно наблюдать)
Так я увидел что примерно половина образа это различные системные библиотеки в
Большой размер образа приводит к тому, что место в registry быстро забивается, кэш слоев хуже переиспользуется, долго пулится в CI/CD
Как можно исправить ситуацию?
- Видно, что в разделе Potential wasted space указано 75 МБ, скорее всего остались артефакты apt, которые можно удалить
- Можно использовать multistage, что чуть улучшит кэширование, и мастхев для продовых образов
🚀 Пост Guru PHP: @msavin_dev
Недавно прогнал наш dev-образ через утилиту dive
Судя по результатам, надо образ на диету садить)
На скрине видно что размер образа разожрался больше гига, можем походить по слоям, увидеть сколько каждый весит, куда он добавляет файлы (что довольно любопытно наблюдать)
Так я увидел что примерно половина образа это различные системные библиотеки в
/usr/bin/lib, например zsh занимает 205МББольшой размер образа приводит к тому, что место в registry быстро забивается, кэш слоев хуже переиспользуется, долго пулится в CI/CD
Как можно исправить ситуацию?
- Видно, что в разделе Potential wasted space указано 75 МБ, скорее всего остались артефакты apt, которые можно удалить
- Можно использовать multistage, что чуть улучшит кэширование, и мастхев для продовых образов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес #microservices #monolithic #architecture
🤔 Middle+ PHP Backend-разработчик в компанию Астро волга
Техническое собеседование PHP-разработчика. ЗП от 165к с фокусом на архитектуру веб-приложений, работу с базами данных и брокерами сообщений
💬 Вопросы:
- Что такое DDD и гексагональная архитектура?
- Как реализовать Singleton?
- Какие шаблоны проектирования используете?
- Что такое партиционирование и как оно работает?
- Разница между горизонтальным и вертикальным масштабированием.
👉 Все вопросы из этого собеседования (31)
📣 Хочешь больше собесов?
Подпишись на наш главный канал
🤔 Middle+ PHP Backend-разработчик в компанию Астро волга
Техническое собеседование PHP-разработчика. ЗП от 165к с фокусом на архитектуру веб-приложений, работу с базами данных и брокерами сообщений
💬 Вопросы:
- Что такое DDD и гексагональная архитектура?
- Как реализовать Singleton?
- Какие шаблоны проектирования используете?
- Что такое партиционирование и как оно работает?
- Разница между горизонтальным и вертикальным масштабированием.
👉 Все вопросы из этого собеседования (31)
📣 Хочешь больше собесов?
Подпишись на наш главный канал