Channel: Библиотека PHP программиста 👨🏼💻👩💻
🔥Laravel — мощный PHP-фреймворк, но его скорость может быть ограничена стандартной связкой Nginx + PHP-FPM. Хотите разогнать своё приложение и сократить время отклика?
На открытом вебинаре 3 апреля в 20:00 мск разберём, как интегрировать Laravel с Roadrunner — высокопроизводительным сервером, который меняет подход к обработке запросов. Используем Octane, оптимизируем ресурсы и ускорим выполнение кода.
Вы научитесь подключать Roadrunner к своим проектам, поймёте, как он меняет жизненный цикл PHP-приложения, и сможете внедрить передовые технологии для масштабирования ваших сервисов.
👉Регистрируйтесь и получите скидку на большое обучение «Framework Laravel»: https://vk.cc/cKmAST
На открытом вебинаре 3 апреля в 20:00 мск разберём, как интегрировать Laravel с Roadrunner — высокопроизводительным сервером, который меняет подход к обработке запросов. Используем Octane, оптимизируем ресурсы и ускорим выполнение кода.
Вы научитесь подключать Roadrunner к своим проектам, поймёте, как он меняет жизненный цикл PHP-приложения, и сможете внедрить передовые технологии для масштабирования ваших сервисов.
👉Регистрируйтесь и получите скидку на большое обучение «Framework Laravel»: https://vk.cc/cKmAST
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Сегодня покажу вам простой, но очень удобный приём, который помогает наводить порядок в больших PHP-проектах — использование кастомных коллекций вместо массивов.
Если вы когда-нибудь передавали в методы или возвращали из них массивы с объектами, то наверняка сталкивались с ситуацией, когда непонятно, что в массиве лежит. А потом кто-нибудь передал туда строку или
Я стал использовать свои классы коллекций. Простой пример:
Теперь везде, где раньше был
- типизацию (и защиту от мусора),
- автодополнение в IDE,
- методы прямо в коллекции (например,
- чище и понятнее сигнатуры методов.
Это похоже на коллекции из Laravel, но я использую это везде, даже в маленьких проектах без фреймворков. Такие объекты делают код чище, устойчивее и легче читаемым.
Попробуйте в одном из ваших проектов заменить массивы объектов на такие коллекции — и вы удивитесь, как стало лучше.
👉 @php_lib
Если вы когда-нибудь передавали в методы или возвращали из них массивы с объектами, то наверняка сталкивались с ситуацией, когда непонятно, что в массиве лежит. А потом кто-нибудь передал туда строку или
null
— и привет, баги.Я стал использовать свои классы коллекций. Простой пример:
class UserCollection
{
/** @var User[] */
private array $users = [];
public function __construct(array $users = [])
{
foreach ($users as $user) {
$this->add($user);
}
}
public function add(User $user): void
{
$this->users[] = $user;
}
public function all(): array
{
return $this->users;
}
public function filterByActive(): self
{
return new self(array_filter($this->users, fn(User $u) => $u->isActive()));
}
// и так далее
}
Теперь везде, где раньше был
User[]
, я работаю с UserCollection
. Это сразу даёт:- типизацию (и защиту от мусора),
- автодополнение в IDE,
- методы прямо в коллекции (например,
filterByActive
, sortByName
, first()
и т.д.),- чище и понятнее сигнатуры методов.
Это похоже на коллекции из Laravel, но я использую это везде, даже в маленьких проектах без фреймворков. Такие объекты делают код чище, устойчивее и легче читаемым.
Попробуйте в одном из ваших проектов заменить массивы объектов на такие коллекции — и вы удивитесь, как стало лучше.
👉 @php_lib
💬 Хочешь прокачать навыки архитектуры на PHP за один вечер?
❗️Даже опытные PHP-разработчики сталкиваются с выбором: богатая или анемичная модель? CQRS или Event Sourcing? REST API или что-то сложнее?
📌 Разложим всё по полочкам на бесплатном авторском вебинаре Дмитрия Кириллова:
- узнаете, как упростить разработку с помощью грамотно выстроенной архитектуры
- научитесь осознанно выбирать инструмент под задачу
- посмотрите на полезные практические приёмы
Превратите архитектуру в своё конкурентное преимущество. Освойте подходы, которые реально работают в "бою" — и стань увереннее в любом проекте, от MVP до highload.
➡️ Регистрируйтесь прямо сейчас: https://vk.cc/cKpX2Q
Приходите на открытый урок 8 апреля в 20:00 мск. Участники получат скидку на курс «PHP Developer. Professional».
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❗️Даже опытные PHP-разработчики сталкиваются с выбором: богатая или анемичная модель? CQRS или Event Sourcing? REST API или что-то сложнее?
- узнаете, как упростить разработку с помощью грамотно выстроенной архитектуры
- научитесь осознанно выбирать инструмент под задачу
- посмотрите на полезные практические приёмы
Превратите архитектуру в своё конкурентное преимущество. Освойте подходы, которые реально работают в "бою" — и стань увереннее в любом проекте, от MVP до highload.
Приходите на открытый урок 8 апреля в 20:00 мск. Участники получат скидку на курс «PHP Developer. Professional».
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня я покажу вам, как я упростил настройку и запуск Laravel-проектов с помощью кастомной Make-команды.
Когда ты постоянно работаешь с Laravel, мелочи вроде
Я решил: хватит.
Создал для себя простую Makefile-команду, которая за секунды поднимает проект в нужной последовательности. Вот пример:
Теперь я просто пишу
Можно добавить другие команды:
💡 Совет: обязательно ставь
👉 @php_lib
Когда ты постоянно работаешь с Laravel, мелочи вроде
php artisan migrate
, npm run dev
, php artisan serve
, php artisan key:generate
превращаются в рутину. А если ещё и несколько проектов — путаницы не избежать.Я решил: хватит.
Создал для себя простую Makefile-команду, которая за секунды поднимает проект в нужной последовательности. Вот пример:
up:
@cp .env.example .env || true
@php artisan key:generate
@composer install
@npm install
@php artisan migrate
@php artisan db:seed
@npm run dev
@php artisan serve
Теперь я просто пишу
make up
— и Laravel взлетает 🚀Можно добавить другие команды:
make test
, make down
, make fresh
, make lint
, и каждый проект становится управляемым по единому сценарию. Это экономит часы за месяц.💡 Совет: обязательно ставь
@
перед командами — так терминал не будет засорён выводом самих строк Makefile.👉 @php_lib
Сегодня я покажу вам одну фичу PHP, которую многие или не знают, или забывают использовать — array destructuring. А зря!
Смотрите, вместо привычного:
Можно писать так:
Код стал чище, короче и понятнее. Особенно приятно, когда возвращается ассоциативный массив — не надо писать вручную кучу
Или с обычными массивами:
Разворот массива работает с любой нумерацией — главное, чтобы структура соответствовала.
💡 Применяю это часто в контроллерах, в тестах и когда разбираю конфиги. Удобно и читаемо.
👉 @php_lib
Смотрите, вместо привычного:
$user = getUser(); // ['name' => 'Ivan', 'email' => '[email protected]']
$name = $user['name'];
$email = $user['email'];
Можно писать так:
['name' => $name, 'email' => $email] = getUser();
Код стал чище, короче и понятнее. Особенно приятно, когда возвращается ассоциативный массив — не надо писать вручную кучу
$data['ключ']
.Или с обычными массивами:
[$id, $name, $email] = getUserArray(); // [1, 'Ivan', '[email protected]']
Разворот массива работает с любой нумерацией — главное, чтобы структура соответствовала.
💡 Применяю это часто в контроллерах, в тестах и когда разбираю конфиги. Удобно и читаемо.
👉 @php_lib
Как настроить мониторинг с помощью Grafana для PHP-приложений?
Каждый PHP-разработчик рано или поздно сталкивается с необходимостью мониторинга своих приложений. Сложные системы требуют эффективных инструментов для отслеживания их работы. Одним из таких инструментов является Grafana — мощное средство для визуализации данных и настройки алертов, которое делает мониторинг простым и наглядным.
На открытом вебинаре 15 апреля в 20:00 мск вы научитесь:
- Подключать различные источники данных, такие как Graphite и PostgreSQL.
- Визуализировать данные с помощью гибких и информативных графиков.
- Настраивать алерты, чтобы получать уведомления о критических событиях.
Присоединяйтесь к вебинару и получите скидку на большое обучение «PHP Developer. Professional.
Регистрируйтесь прямо сейчас: https://vk.cc/cKFYw2
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Каждый PHP-разработчик рано или поздно сталкивается с необходимостью мониторинга своих приложений. Сложные системы требуют эффективных инструментов для отслеживания их работы. Одним из таких инструментов является Grafana — мощное средство для визуализации данных и настройки алертов, которое делает мониторинг простым и наглядным.
На открытом вебинаре 15 апреля в 20:00 мск вы научитесь:
- Подключать различные источники данных, такие как Graphite и PostgreSQL.
- Визуализировать данные с помощью гибких и информативных графиков.
- Настраивать алерты, чтобы получать уведомления о критических событиях.
Присоединяйтесь к вебинару и получите скидку на большое обучение «PHP Developer. Professional.
Регистрируйтесь прямо сейчас: https://vk.cc/cKFYw2
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔍 Как логировать все входящие параметры в методы классов
Представим, что у нас есть большой проект с кучей классов, и в одном месте какая-то логика работает не так, как ожидалось. Часто хочется понять: а с какими аргументами вообще вызывается метод?
Вот удобный способ — использовать
🧠 Профит: когда метод вызывается, вы сразу в логе видите:
- с какими аргументами он был вызван
- откуда он был вызван (файл и строка)
Это суперполезно в проде, когда нет возможности ставить дебаггер, а нужно поймать, что пошло не так.
📌 Совет: делайте
👉 @php_lib
Представим, что у нас есть большой проект с кучей классов, и в одном месте какая-то логика работает не так, как ожидалось. Часто хочется понять: а с какими аргументами вообще вызывается метод?
Вот удобный способ — использовать
debug_backtrace()
и func_get_args()
:
class SomeService {
public function process($userId, $data) {
$this->logArgs(__METHOD__);
// Дальше идёт логика
}
protected function logArgs($methodName) {
$args = func_get_args();
array_shift($args); // Убираем $methodName
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1];
error_log(sprintf(
"[%s] Called from %s:%s with args: %s",
$methodName,
$trace['file'] ?? 'n/a',
$trace['line'] ?? 'n/a',
json_encode($args, JSON_UNESCAPED_UNICODE)
));
}
}
🧠 Профит: когда метод вызывается, вы сразу в логе видите:
- с какими аргументами он был вызван
- откуда он был вызван (файл и строка)
Это суперполезно в проде, когда нет возможности ставить дебаггер, а нужно поймать, что пошло не так.
📌 Совет: делайте
logArgs()
общим методом в базовом классе и логируйте важные вызовы на проде, оборачивая условием по уровню логирования или флагу.👉 @php_lib
.🛠 Как логировать SQL-запросы только при ошибках
Часто сталкиваюсь с ситуацией: ошибка 500 в проде, а что именно пошло не так — неясно. Особенно если это была ошибка в SQL-запросе. Логировать все SQL-запросы — слишком жирно и шумно. Но логировать только при исключениях — вот это огонь!
🔍 Решение
Добавьте следующий сниппет в
🔐 Пояснение
- При каждом SQL-запросе мы проверяем, был ли в этом запросе выброшен exception.
- Если да — логируем SQL.
- Используем отдельный лог-канал
👉 Создайте в
Теперь, если в продакшене будет падение — вы увидите какой SQL-запрос был выполнен перед ошибкой. Это невероятно ускоряет диагностику багов.
👉 @php_lib
Часто сталкиваюсь с ситуацией: ошибка 500 в проде, а что именно пошло не так — неясно. Особенно если это была ошибка в SQL-запросе. Логировать все SQL-запросы — слишком жирно и шумно. Но логировать только при исключениях — вот это огонь!
🔍 Решение
Добавьте следующий сниппет в
AppServiceProvider
:
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
public function boot()
{
DB::listen(function ($query) {
if (app()->bound('exception.logged')) {
Log::channel('sql')->debug($query->sql, $query->bindings);
}
});
app()->singleton('exception.logged', function () {
return true;
});
app()->error(function (\Throwable $e) {
app()->instance('exception.logged', true);
});
}
🔐 Пояснение
- При каждом SQL-запросе мы проверяем, был ли в этом запросе выброшен exception.
- Если да — логируем SQL.
- Используем отдельный лог-канал
sql
, чтобы не засорять основной laravel.log
.👉 Создайте в
config/logging.php
канал sql
, направьте его в отдельный файл, например storage/logs/sql.log
.Теперь, если в продакшене будет падение — вы увидите какой SQL-запрос был выполнен перед ошибкой. Это невероятно ускоряет диагностику багов.
👉 @php_lib
⚡️Laravel — удобный PHP-фреймворк, а его возможности выходят далеко за рамки классической веб-разработки. Хотите увидеть, как он помогает автоматизировать реальные процессы?
На бесплатном вебинаре 16 апреля в 20:00 мск покажем, как с помощью Laravel и Telegram Bot API создать Telegram-бота для дистанционного полива цветов. Подключим IoT-устройства, разберём работу с MQTT и визуализируем данные через Grafana.
Вы узнаете, как использовать Laravel в IoT-сценариях, управлять устройствами через Telegram, собирать и отображать метрики, а также получите представление о возможностях Arduino на примере ESP-8266.
👉Регистрируйтесь и получите скидку на большое обучение «Framework Laravel»: https://vk.cc/cKIOcm
На бесплатном вебинаре 16 апреля в 20:00 мск покажем, как с помощью Laravel и Telegram Bot API создать Telegram-бота для дистанционного полива цветов. Подключим IoT-устройства, разберём работу с MQTT и визуализируем данные через Grafana.
Вы узнаете, как использовать Laravel в IoT-сценариях, управлять устройствами через Telegram, собирать и отображать метрики, а также получите представление о возможностях Arduino на примере ESP-8266.
👉Регистрируйтесь и получите скидку на большое обучение «Framework Laravel»: https://vk.cc/cKIOcm
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Сегодня речь пойдёт о типах в PHP и как правильно их использовать в вашем проекте.
🧠 Сила строгой типизации в PHP
В PHP 7 мы получили возможность указывать типы аргументов и возвращаемых значений. В PHP 8 всё стало ещё строже. Но многие до сих пор этим пренебрегают — зря!
Вот пример. Допустим, у вас есть функция:
А теперь тот же код с типами:
Плюсы второго варианта:
- Автоматическая проверка типов во время выполнения
- IDE подсказывает, если вы передаёте что-то не то
- Код самодокументируемый
- Проще писать тесты
🔐 Совет от меня: включите строгий режим в начале всех ваших файлов:
Это заставит PHP быть более строго типизированным и поможет ловить ошибки ещё до выполнения логики.
💬 А вы используете строгую типизацию? Или всё ещё пишете
Поделитесь опытом в комментариях👇
👉 @php_lib
🧠 Сила строгой типизации в PHP
В PHP 7 мы получили возможность указывать типы аргументов и возвращаемых значений. В PHP 8 всё стало ещё строже. Но многие до сих пор этим пренебрегают — зря!
Вот пример. Допустим, у вас есть функция:
function calculateTotal($price, $quantity) {
return $price * $quantity;
}
А теперь тот же код с типами:
function calculateTotal(float $price, int $quantity): float {
return $price * $quantity;
}
Плюсы второго варианта:
- Автоматическая проверка типов во время выполнения
- IDE подсказывает, если вы передаёте что-то не то
- Код самодокументируемый
- Проще писать тесты
🔐 Совет от меня: включите строгий режим в начале всех ваших файлов:
declare(strict_types=1);
Это заставит PHP быть более строго типизированным и поможет ловить ошибки ещё до выполнения логики.
💬 А вы используете строгую типизацию? Или всё ещё пишете
$data = getData();
и надеетесь, что там будет то, что вы ожидаете?Поделитесь опытом в комментариях👇
👉 @php_lib
🚀 Подпишись и прокачай свои скилы: лучшие каналы для IT-специалистов 👨💻📲
Папка с каналами для DevOps, Linux - Windows СисАдминов👍
Папка с каналами для 1С программистов🧑💻
Папка с каналами для C++ программистов👩💻
Папка с каналами для Python программистов👩💻
Папка с каналами для Java программистов🖥
Папка с книгами для программистов 📚
Папка для программистов (frontend, backend, iOS, Android)💻
GitHub Сообщество🧑💻
https://hottg.com/Githublib Интересное из GitHub
Базы данных (Data Base)🖥
https://hottg.com/database_info Все про базы данных
Разработка игр📱
https://hottg.com/game_devv Все о разработке игр
БигДата, машинное обучение🖥
https://hottg.com/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
QA, тестирование🖥
https://hottg.com/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://hottg.com/itumor Шутки программистов
Защита, взлом, безопасность💻
https://hottg.com/thehaking Канал о кибербезопасности
https://hottg.com/xakep_2 Хакер Free
Книги, статьи для дизайнеров🎨
https://hottg.com/ux_web Статьи, книги для дизайнеров
Математика🧮
https://hottg.com/Pomatematike Канал по математике
https://hottg.com/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак🙃
https://hottg.com/Excel_lifehack
Технологии🖥
https://hottg.com/tikon_1 Новости высоких технологий, науки и техники💡
https://hottg.com/mir_teh Мир технологий (Technology World)
Вакансии💰
https://hottg.com/sysadmin_rabota Системный Администратор
https://hottg.com/progjob Вакансии в IT
https://hottg.com/rabota1C_rus Вакансии для программистов 1С
Папка с каналами для DevOps, Linux - Windows СисАдминов
Папка с каналами для 1С программистов
Папка с каналами для C++ программистов
Папка с каналами для Python программистов
Папка с каналами для Java программистов
Папка с книгами для программистов 📚
Папка для программистов (frontend, backend, iOS, Android)
GitHub Сообщество
https://hottg.com/Githublib Интересное из GitHub
Базы данных (Data Base)
https://hottg.com/database_info Все про базы данных
Разработка игр
https://hottg.com/game_devv Все о разработке игр
БигДата, машинное обучение
https://hottg.com/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
QA, тестирование
https://hottg.com/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://hottg.com/itumor Шутки программистов
Защита, взлом, безопасность
https://hottg.com/thehaking Канал о кибербезопасности
https://hottg.com/xakep_2 Хакер Free
Книги, статьи для дизайнеров
https://hottg.com/ux_web Статьи, книги для дизайнеров
Математика
https://hottg.com/Pomatematike Канал по математике
https://hottg.com/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак
https://hottg.com/Excel_lifehack
Технологии
https://hottg.com/tikon_1 Новости высоких технологий, науки и техники💡
https://hottg.com/mir_teh Мир технологий (Technology World)
Вакансии
https://hottg.com/sysadmin_rabota Системный Администратор
https://hottg.com/progjob Вакансии в IT
https://hottg.com/rabota1C_rus Вакансии для программистов 1С
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Админ Devops
You’ve been invited to add the folder “Админ Devops”, which includes 18 chats.
Сегодня я хочу поговорить о том, как избавиться от дублирования кода в Laravel, особенно в тех местах, где это совсем не бросается в глаза — в валидации запросов.
✋ Проблема
У тебя есть формы на создание и обновление сущности. И в обоих случаях в контроллере или Form Request’ах ты пишешь одинаковые правила валидации, только с небольшими отличиями.
Пример:
✅ Решение — базовый класс с общими правилами
Создай абстрактный класс с общими правилами:
А потом в наследниках добавляй нужные модификаторы:
🤔 Альтернатива — кастомная Rule-комбинация
Можно пойти дальше и использовать кастомные Rule-классы, если валидация становится сложной и завязанной на бизнес-логику.
Я часто вижу дублирование в валидации, особенно в старых проектах. Убрав это, код становится чище, а изменения в правилах — в разы проще.
А ты как организуешь валидацию? Используешь Form Request или валидируешь прямо в контроллере?
👉 @php_lib
✋ Проблема
У тебя есть формы на создание и обновление сущности. И в обоих случаях в контроллере или Form Request’ах ты пишешь одинаковые правила валидации, только с небольшими отличиями.
Пример:
// StorePostRequest.php
return [
'title' => 'required|string|max:255',
'content' => 'required',
];
// UpdatePostRequest.php
return [
'title' => 'sometimes|required|string|max:255',
'content' => 'sometimes|required',
];
✅ Решение — базовый класс с общими правилами
Создай абстрактный класс с общими правилами:
abstract class BasePostRequest extends FormRequest
{
protected function commonRules(): array
{
return [
'title' => 'string|max:255',
'content' => 'string',
];
}
}
А потом в наследниках добавляй нужные модификаторы:
// StorePostRequest.php
class StorePostRequest extends BasePostRequest
{
public function rules(): array
{
return array_merge([
'title' => 'required',
'content' => 'required',
], $this->commonRules());
}
}
// UpdatePostRequest.php
class UpdatePostRequest extends BasePostRequest
{
public function rules(): array
{
return array_merge([
'title' => 'sometimes|required',
'content' => 'sometimes|required',
], $this->commonRules());
}
}
🤔 Альтернатива — кастомная Rule-комбинация
Можно пойти дальше и использовать кастомные Rule-классы, если валидация становится сложной и завязанной на бизнес-логику.
Я часто вижу дублирование в валидации, особенно в старых проектах. Убрав это, код становится чище, а изменения в правилах — в разы проще.
А ты как организуешь валидацию? Используешь Form Request или валидируешь прямо в контроллере?
👉 @php_lib
Сегодня я покажу вам простой, но мощный способ, как ускорить отладку в Laravel при работе с большим количеством логики в контроллерах и сервисах.
🔍 Ловим баги быстрее с помощью
Обычно мы используем
Спасает Ray — инструмент от Spatie, который интегрируется с Laravel и выводит отладочную информацию в отдельное десктопное приложение.
Пример:
Ты можешь:
- выводить переменные без прерывания скрипта;
- смотреть SQL-запросы в реальном времени;
- использовать цветовые метки, чтобы различать вывод из разных участков кода.
⚙️ Установка
И по желанию установить десктоп-приложение с сайта Spatie.
В
🧠 Совет от себя
Ray особенно хорошо заходит, когда работаешь в команде — ты можешь добавить временный
Пробовали Ray? Или у вас есть свои инструменты для отладки — может, кастомные макросы или трейты? Делитесь в комментах 👇
👉 @php_lib
🔍 Ловим баги быстрее с помощью
ray()
от SpatieОбычно мы используем
dd()
или dump()
в Laravel, чтобы посмотреть, что творится с переменными. Но как только проект становится крупнее — эти методы начинают мешать, особенно когда нужно отслеживать несколько значений в разных местах.Спасает Ray — инструмент от Spatie, который интегрируется с Laravel и выводит отладочную информацию в отдельное десктопное приложение.
Пример:
ray($user);
ray($order)->blue();
ray()->showQueries();
Ты можешь:
- выводить переменные без прерывания скрипта;
- смотреть SQL-запросы в реальном времени;
- использовать цветовые метки, чтобы различать вывод из разных участков кода.
⚙️ Установка
composer require spatie/laravel-ray --dev
И по желанию установить десктоп-приложение с сайта Spatie.
В
config/ray.php
можно кастомизировать поведение: включать Ray только на dev-среде, логировать только определённые запросы и т.д.🧠 Совет от себя
Ray особенно хорошо заходит, когда работаешь в команде — ты можешь добавить временный
ray()
-лог, не ломая исполнение и не мешая другим.Пробовали Ray? Или у вас есть свои инструменты для отладки — может, кастомные макросы или трейты? Делитесь в комментах 👇
👉 @php_lib
💰Вопрос безопасности в разработке становится всё более актуальным. Но как обосновать инвестиции в безопасность для бизнеса? Как оценить её финансовую сторону?
🗓 Открытый вебинар 23 апреля в 20:00 мск даст ответы на самые важные вопросы. Мы расскажем, как сэкономить на долгосрочных потерях, внедряя эффективные меры безопасности с самого начала разработки.
🧑💻 Спикер Максим Чащин — директор по информационной безопасности в ГК «Девелоника».
Вы узнаете,сколько стоит устранение уязвимостей, как принцип «shift left» влияет на итоговую производительность и как измерять эффективность мер безопасности. Это поможет вам убедить руководство инвестировать в безопасность на всех уровнях разработки.
👉 Присоединяйтесь к открытому уроку и получите скидку на большое обучение «Внедрение и работа в DevSecOps»: https://vk.cc/cKVaef
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Вы узнаете,
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня я покажу вам, как удобно логировать в Laravel, не засоряя код и не превращая проект в болото из
💡 Используем каналы логирования правильно
Laravel предоставляет мощную систему логирования на базе Monolog. Но часто мы ограничиваемся дефолтным логом. А зря.
Например, создаём отдельный канал для логов оплаты:
Теперь в нужном месте можно писать:
И всё — никакой путаницы. В
👀 Бонус: helper-функция
Чтобы писать меньше:
Теперь вызываем везде просто
Пишите в комментах, какие каналы логирования вы используете и куда пишете — в файл, телегу или Sentry?
👉 @php_lib
Log::info()
на каждом шагу.💡 Используем каналы логирования правильно
Laravel предоставляет мощную систему логирования на базе Monolog. Но часто мы ограничиваемся дефолтным логом. А зря.
Например, создаём отдельный канал для логов оплаты:
// config/logging.php
'channels' => [
'payment' => [
'driver' => 'single',
'path' => storage_path('logs/payment.log'),
'level' => 'info',
],
],
Теперь в нужном месте можно писать:
Log::channel('payment')->info('Платёж прошёл', ['user_id' => $user->id, 'amount' => $amount]);
И всё — никакой путаницы. В
laravel.log
остаётся только то, что важно для всего проекта, а логи оплаты — отдельно. Можно и в телеграм скидывать, если настроить webhook.👀 Бонус: helper-функция
Чтобы писать меньше:
if (!function_exists('payment_log')) {
function payment_log($message, array $context = []) {
\Log::channel('payment')->info($message, $context);
}
}
Теперь вызываем везде просто
payment_log('Платёж принят')
.Пишите в комментах, какие каналы логирования вы используете и куда пишете — в файл, телегу или Sentry?
👉 @php_lib
Открытый вебинар «Почему стоит выбрать Symfony для нового проекта» в OTUS
📅 29 апреля, 20:00 МСК · онлайн · бесплатно
👤 Спикер — Михаил Каморин
Кто ведёт
• Tech Lead в Avito
• 20 + лет в разработке (10 лет B2B, 4 года B2C)
• 10 + лет на PHP, 5 лет — на Symfony
• Автор двух RAD‑движков (Laravel + Symfony), запущенных в 10 + прод‑проектах
• Выпускник ВМК МГУ, член ПК Podlodka PHP Crew
Symfony — ядро экосистемы PHP. Разберём, как фреймворк помогает запускать и поддерживать продукты с горизонтом 5 + лет.
Ключевые вопросы
• Модульность — 25 + компонентов подключаются по мере надобности
• Гибкость — DI‑контейнер переопределяет сервисы без боли
• Стабильность — LTS 3 года, минорные версии совместимы назад
• Speed‑toolkit — Symfony CLI, Flex, автоконфигурация, Profiler
Кому полезно
— Middle/Senior PHP‑разработчикам, архитекторам и тимлидам, которым нужны строгие аргументы «за» Symfony.
Формат — 60 минут концентрированной практики + Q&A без маркетинговой воды.
Участие бесплатное. Места ограничены. Регистрируйтесь.
→ https://vk.cc/cL1f9x
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
📅 29 апреля, 20:00 МСК · онлайн · бесплатно
👤 Спикер — Михаил Каморин
Кто ведёт
• Tech Lead в Avito
• 20 + лет в разработке (10 лет B2B, 4 года B2C)
• 10 + лет на PHP, 5 лет — на Symfony
• Автор двух RAD‑движков (Laravel + Symfony), запущенных в 10 + прод‑проектах
• Выпускник ВМК МГУ, член ПК Podlodka PHP Crew
Symfony — ядро экосистемы PHP. Разберём, как фреймворк помогает запускать и поддерживать продукты с горизонтом 5 + лет.
Ключевые вопросы
• Модульность — 25 + компонентов подключаются по мере надобности
• Гибкость — DI‑контейнер переопределяет сервисы без боли
• Стабильность — LTS 3 года, минорные версии совместимы назад
• Speed‑toolkit — Symfony CLI, Flex, автоконфигурация, Profiler
Кому полезно
— Middle/Senior PHP‑разработчикам, архитекторам и тимлидам, которым нужны строгие аргументы «за» Symfony.
Формат — 60 минут концентрированной практики + Q&A без маркетинговой воды.
Участие бесплатное. Места ограничены. Регистрируйтесь.
→ https://vk.cc/cL1f9x
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Сегодня я покажу вам простой способ, как разрулить хардкорный баг с session_start() в PHP.
Недавно один подписчик столкнулся с ситуацией: скрипт падает с ошибкой "Cannot send session cache limiter - headers already sent". Думаю, каждый второй PHP-разработчик хотя бы раз в жизни это видел.
Разбираемся.
💥 Причина
Ошибка возникает, когда
✅ Как лечить
1. Ищем вывод до session_start()
- Проверь, нет ли
- Включи буферизацию
Но это костыль. Лучше всё же вычистить лишний вывод.
2. Идеальная структура файла
3. Ищи BOM
Иногда редакторы типа Notepad++ добавляют невидимый символ BOM в начало файла. Он тоже считается выводом. Решается сохранением файла в UTF-8 без BOM.
🛠 Мой способ отладки
Когда всё выглядит правильно, но ошибка всё равно есть:
- Создай новый чистый файл, вставь туда
- Используй
Это сэкономило мне кучу времени при отладке старых легаси-проектов.
👉 @php_lib
Недавно один подписчик столкнулся с ситуацией: скрипт падает с ошибкой "Cannot send session cache limiter - headers already sent". Думаю, каждый второй PHP-разработчик хотя бы раз в жизни это видел.
Разбираемся.
💥 Причина
Ошибка возникает, когда
session_start()
вызывается после того, как браузеру уже отправлены заголовки. В PHP это означает — где-то до session_start()
был echo
, пробел вне тегов <?php ?>
, или даже var_dump()
для отладки. Любой вывод в браузер = PHP уже отправил заголовки. А session_start()
хочет их изменить — и ловим ошибку.✅ Как лечить
1. Ищем вывод до session_start()
- Проверь, нет ли
echo
, print
, отладочных функций или лишних символов до вызова session_start()
.- Включи буферизацию
ob_start()
в начале скрипта — поможет временно «глотать» вывод:
ob_start();
session_start();
Но это костыль. Лучше всё же вычистить лишний вывод.
2. Идеальная структура файла
<?php
// Никакого вывода до этого места!
session_start();
// Весь остальной код
?>
3. Ищи BOM
Иногда редакторы типа Notepad++ добавляют невидимый символ BOM в начало файла. Он тоже считается выводом. Решается сохранением файла в UTF-8 без BOM.
🛠 Мой способ отладки
Когда всё выглядит правильно, но ошибка всё равно есть:
- Создай новый чистый файл, вставь туда
session_start()
— если работает, значит проблема в другом коде.- Используй
headers_sent()
:
if (headers_sent($file, $line)) {
echo "Вывод уже начат в $file на строке $line";
}
Это сэкономило мне кучу времени при отладке старых легаси-проектов.
👉 @php_lib
⚡️Laravel — удобный PHP-фреймворк, а его возможности выходят далеко за рамки классической веб-разработки. Хотите увидеть, как он помогает автоматизировать реальные процессы?
На бесплатном вебинаре 16 апреля в 20:00 мск покажем, как с помощью Laravel и Telegram Bot API создать Telegram-бота для дистанционного полива цветов. Подключим IoT-устройства, разберём работу с MQTT и визуализируем данные через Grafana.
Вы узнаете, как использовать Laravel в IoT-сценариях, управлять устройствами через Telegram, собирать и отображать метрики, а также получите представление о возможностях Arduino на примере ESP-8266.
👉Регистрируйтесь и получите скидку на большое обучение «Framework Laravel»: https://vk.cc/cL4HRV
На бесплатном вебинаре 16 апреля в 20:00 мск покажем, как с помощью Laravel и Telegram Bot API создать Telegram-бота для дистанционного полива цветов. Подключим IoT-устройства, разберём работу с MQTT и визуализируем данные через Grafana.
Вы узнаете, как использовать Laravel в IoT-сценариях, управлять устройствами через Telegram, собирать и отображать метрики, а также получите представление о возможностях Arduino на примере ESP-8266.
👉Регистрируйтесь и получите скидку на большое обучение «Framework Laravel»: https://vk.cc/cL4HRV
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🚀 Подборка Telegram каналов для программистов
Системное администрирование, DevOps 📌
https://hottg.com/bash_srv Bash Советы
https://hottg.com/win_sysadmin Системный Администратор Windows
https://hottg.com/sysadmin_girl Девочка Сисадмин
https://hottg.com/srv_admin_linux Админские угодья
https://hottg.com/linux_srv Типичный Сисадмин
https://hottg.com/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://hottg.com/linux_odmin Linux: Системный администратор
https://hottg.com/devops_star DevOps Star (Звезда Девопса)
https://hottg.com/i_linux Системный администратор
https://hottg.com/linuxchmod Linux
https://hottg.com/sys_adminos Системный Администратор
https://hottg.com/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://hottg.com/sysadminof Книги для админов, полезные материалы
https://hottg.com/i_odmin Все для системного администратора
https://hottg.com/i_odmin_book Библиотека Системного Администратора
https://hottg.com/i_odmin_chat Чат системных администраторов
https://hottg.com/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://hottg.com/sysadminoff Новости Линукс Linux
1C разработка 📌
https://hottg.com/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://hottg.com/DevLab1C 1С:Предприятие 8
https://hottg.com/razrab_1C 1C Разработчик
https://hottg.com/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://hottg.com/rabota1C_rus Вакансии для программистов 1С
Программирование C++📌
https://hottg.com/cpp_lib Библиотека C/C++ разработчика
https://hottg.com/cpp_knigi Книги для программистов C/C++
https://hottg.com/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://hottg.com/pythonofff Python академия.
https://hottg.com/BookPython Библиотека Python разработчика
https://hottg.com/python_real Python подборки на русском и английском
https://hottg.com/python_360 Книги по Python
Java разработка 📌
https://hottg.com/BookJava Библиотека Java разработчика
https://hottg.com/java_360 Книги по Java Rus
https://hottg.com/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://hottg.com/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://hottg.com/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://hottg.com/developer_mobila Мобильная разработка
https://hottg.com/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://hottg.com/frontend_1 Подборки для frontend разработчиков
https://hottg.com/frontend_sovet Frontend советы, примеры и практика!
https://hottg.com/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://hottg.com/game_devv Все о разработке игр
Библиотеки 📌
https://hottg.com/book_for_dev Книги для программистов Rus
https://hottg.com/programmist_of Книги по программированию
https://hottg.com/proglb Библиотека программиста
https://hottg.com/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://hottg.com/bigdata_1 Big Data, Machine Learning
Программирование 📌
https://hottg.com/bookflow Лекции, видеоуроки, доклады с IT конференций
https://hottg.com/rust_lib Полезный контент по программированию на Rust
https://hottg.com/golang_lib Библиотека Go (Golang) разработчика
https://hottg.com/itmozg Программисты, дизайнеры, новости из мира IT
https://hottg.com/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://hottg.com/nodejs_lib Подборки по Node js и все что с ним связано
https://hottg.com/ruby_lib Библиотека Ruby программиста
https://hottg.com/lifeproger Жизнь программиста. Авторский канал.
QA, тестирование 📌
https://hottg.com/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://hottg.com/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://hottg.com/thehaking Канал о кибербезопасности
https://hottg.com/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://hottg.com/ux_web Статьи, книги для дизайнеров
Математика 📌
https://hottg.com/Pomatematike Канал по математике
https://hottg.com/phis_mat Обучающие видео, книги по Физике и Математике
https://hottg.com/matgeoru Математика | Геометрия | Логика
Excel лайфхак📌
https://hottg.com/Excel_lifehack
https://hottg.com/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://hottg.com/sysadmin_rabota Системный Администратор
https://hottg.com/progjob Вакансии в IT
Системное администрирование, DevOps 📌
https://hottg.com/bash_srv Bash Советы
https://hottg.com/win_sysadmin Системный Администратор Windows
https://hottg.com/sysadmin_girl Девочка Сисадмин
https://hottg.com/srv_admin_linux Админские угодья
https://hottg.com/linux_srv Типичный Сисадмин
https://hottg.com/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://hottg.com/linux_odmin Linux: Системный администратор
https://hottg.com/devops_star DevOps Star (Звезда Девопса)
https://hottg.com/i_linux Системный администратор
https://hottg.com/linuxchmod Linux
https://hottg.com/sys_adminos Системный Администратор
https://hottg.com/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://hottg.com/sysadminof Книги для админов, полезные материалы
https://hottg.com/i_odmin Все для системного администратора
https://hottg.com/i_odmin_book Библиотека Системного Администратора
https://hottg.com/i_odmin_chat Чат системных администраторов
https://hottg.com/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://hottg.com/sysadminoff Новости Линукс Linux
1C разработка 📌
https://hottg.com/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://hottg.com/DevLab1C 1С:Предприятие 8
https://hottg.com/razrab_1C 1C Разработчик
https://hottg.com/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://hottg.com/rabota1C_rus Вакансии для программистов 1С
Программирование C++📌
https://hottg.com/cpp_lib Библиотека C/C++ разработчика
https://hottg.com/cpp_knigi Книги для программистов C/C++
https://hottg.com/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://hottg.com/pythonofff Python академия.
https://hottg.com/BookPython Библиотека Python разработчика
https://hottg.com/python_real Python подборки на русском и английском
https://hottg.com/python_360 Книги по Python
Java разработка 📌
https://hottg.com/BookJava Библиотека Java разработчика
https://hottg.com/java_360 Книги по Java Rus
https://hottg.com/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://hottg.com/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://hottg.com/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://hottg.com/developer_mobila Мобильная разработка
https://hottg.com/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://hottg.com/frontend_1 Подборки для frontend разработчиков
https://hottg.com/frontend_sovet Frontend советы, примеры и практика!
https://hottg.com/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://hottg.com/game_devv Все о разработке игр
Библиотеки 📌
https://hottg.com/book_for_dev Книги для программистов Rus
https://hottg.com/programmist_of Книги по программированию
https://hottg.com/proglb Библиотека программиста
https://hottg.com/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://hottg.com/bigdata_1 Big Data, Machine Learning
Программирование 📌
https://hottg.com/bookflow Лекции, видеоуроки, доклады с IT конференций
https://hottg.com/rust_lib Полезный контент по программированию на Rust
https://hottg.com/golang_lib Библиотека Go (Golang) разработчика
https://hottg.com/itmozg Программисты, дизайнеры, новости из мира IT
https://hottg.com/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://hottg.com/nodejs_lib Подборки по Node js и все что с ним связано
https://hottg.com/ruby_lib Библиотека Ruby программиста
https://hottg.com/lifeproger Жизнь программиста. Авторский канал.
QA, тестирование 📌
https://hottg.com/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://hottg.com/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://hottg.com/thehaking Канал о кибербезопасности
https://hottg.com/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://hottg.com/ux_web Статьи, книги для дизайнеров
Математика 📌
https://hottg.com/Pomatematike Канал по математике
https://hottg.com/phis_mat Обучающие видео, книги по Физике и Математике
https://hottg.com/matgeoru Математика | Геометрия | Логика
Excel лайфхак📌
https://hottg.com/Excel_lifehack
https://hottg.com/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://hottg.com/sysadmin_rabota Системный Администратор
https://hottg.com/progjob Вакансии в IT
Telegram
Bash Советы
🚀 Секреты и советы по Bash
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
💻 Прокачивай терминал вместе с нами! 👇
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
💻 Прокачивай терминал вместе с нами! 👇
Сегодня я хочу показать вам простой, но очень полезный приём для работы с массивами в PHP — использование функции
Очень часто бывает задача: из многомерного массива "вытащить" только один столбец данных. Например, у вас есть массив пользователей:
И нужно получить только список всех email'ов. Многие делают это через
Результат будет таким:
А ещё
И тогда получится:
Это удобный способ быстрого преобразования данных без лишнего кода.
Пользуетесь ли вы
👉 @php_lib
array_column()
.Очень часто бывает задача: из многомерного массива "вытащить" только один столбец данных. Например, у вас есть массив пользователей:
$users = [
['id' => 1, 'name' => 'Иван', 'email' => '[email protected]'],
['id' => 2, 'name' => 'Ольга', 'email' => '[email protected]'],
['id' => 3, 'name' => 'Павел', 'email' => '[email protected]'],
];
И нужно получить только список всех email'ов. Многие делают это через
foreach
, но есть более элегантное решение:
$emails = array_column($users, 'email');
Результат будет таким:
[
'[email protected]',
'[email protected]',
'[email protected]'
]
А ещё
array_column()
позволяет указать третий параметр — ключ массива. Например, сделать email по id:
$emailsById = array_column($users, 'email', 'id');
И тогда получится:
[
1 => '[email protected]',
2 => '[email protected]',
3 => '[email protected]'
]
Это удобный способ быстрого преобразования данных без лишнего кода.
Пользуетесь ли вы
array_column()
в своих проектах? Или предпочитаете что-то другое? Напишите в комментариях!👉 @php_lib
HTML Embed Code: