Библиотека PHP программиста 👨🏼💻👩💻
Kanalga Telegram’da o‘tish
Полезные материалы по PHP, Laravel, Symfony, CodeIgniter, CakePHP, Phalcon По всем вопросам @evgenycarter
Ko'proq ko'rsatish2 094
Obunachilar
-224 soatlar
-47 kunlar
-1130 kunlar
Postlar arxiv
Как бороться с «загадочными» багами в PHP? 🤔
Сегодня хочу поговорить про одну из самых неприятных проблем в программировании — «загадочные» баги. Это те ошибки, которые возникают только в продакшене, исчезают при попытке дебага и доводят до нервного тика 😬.
🔍 Почему это происходит?
- Разные окружения — локально у вас PHP 8.2, а на сервере 7.4 (и вдруг
match ломает весь код).
- Необработанные ошибки — ошибки скрыты @, а логи молчат.
- Состояние кэша — в OpCache или APCu залипла старая версия кода.
- Гонки потоков — скрипты выполняются параллельно и вмешиваются друг в друга.
🛠 Как с этим бороться?
1️⃣ Выключить OpCache на тестовом сервере
Это позволит быстрее проверять изменения и исключить залипание кода.
2️⃣ Настроить логирование
Включите error_reporting(E_ALL) и убедитесь, что display_errors=Off, а log_errors=On с путём к файлу логов.
3️⃣ Сравнить окружения
Используйте phpinfo() или php -m для проверки версий PHP и установленных модулей.
4️⃣ Включить трассировку ошибок
Xdebug поможет отследить стек вызовов, а Laravel Telescope покажет внутренности запроса.
5️⃣ Повторить проблему на копии продакшена
Запустите код в Docker с конфигом продакшена или создайте staging-сервер.
6️⃣ Подключить мониторинг и алерты
Инструменты типа Sentry, Bugsnag или New Relic помогут ловить ошибки раньше, чем их заметят пользователи.
👉 @php_libОптимизация SQL-запросов в PHP: избавляемся от тормозов! 🚀
Сегодня я покажу вам, как улучшить производительность SQL-запросов в PHP и избавиться от лишней нагрузки на базу данных.
1. Используйте подготовленные запросы
Не только защита от SQL-инъекций, но и кеширование запросов внутри СУБД!
Пример с PDO:
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(['email' => $email]);
$user = $stmt->fetch();
2. Выбирайте только нужные данные
Зачем вам SELECT *, если нужно только id и name? Выбирайте только нужные колонки!
$stmt = $pdo->query("SELECT id, name FROM users");
3. Индексы – ваши друзья
Проверяйте, есть ли индексы на полях, которые часто используются в WHERE и JOIN. Без индексов база будет делать полный перебор строк!
CREATE INDEX idx_email ON users(email);
4. Избегайте N+1 запроса
Вместо 100 мелких запросов – один с JOIN.
❌ Плохо (100 запросов в цикле!):
foreach ($users as $user) {
$stmt = $pdo->prepare("SELECT * FROM orders WHERE user_id = ?");
$stmt->execute([$user['id']]);
$orders[$user['id']] = $stmt->fetchAll();
}
✅ Хорошо (один запрос):
$query = "SELECT users.id, users.name, orders.id as order_id
FROM users
LEFT JOIN orders ON users.id = orders.user_id";
$stmt = $pdo->query($query);
$result = $stmt->fetchAll();
5. Используйте кеширование
Храните частые запросы в Redis или Memcached, чтобы снизить нагрузку на базу.
$cacheKey = "users_list";
$users = $redis->get($cacheKey);
if (!$users) {
$users = $pdo->query("SELECT id, name FROM users")->fetchAll();
$redis->setex($cacheKey, 3600, json_encode($users));
}
Эти советы помогут вам ускорить ваш PHP-код, снизить нагрузку на базу данных и сделать сайт более отзывчивым.
👉 @php_lib🔥 Как избежать проблем с
isset() и empty() в PHP?
Сегодня разберём две часто используемые функции в PHP — isset() и empty(), которые могут вести себя не так, как вы ожидаете.
📌 isset()
Функция isset($var) проверяет, была ли переменная установлена и не равна ли она null.
❗ Пример подвоха:
$var = null;
var_dump(isset($var)); // false
Если переменной вообще нет в коде — тоже будет false.
📌 empty()
Функция empty($var) проверяет, считается ли переменная "пустой".
❗ Пустыми считаются:
- "" (пустая строка)
- 0 (число)
- "0" (строка с нулём)
- null
- false
- [] (пустой массив)
Пример:
$var = "0";
var_dump(empty($var)); // true, хотя строка не null
⚠️ Ошибка: проверка if (!isset($var) || empty($var)) может привести к неожиданному результату.
🔥 Лучший подход?
Используйте строгие проверки:
if ($var === null) { /* Переменная null */ }
if ($var === '') { /* Пустая строка */ }
if ($var === 0) { /* Число 0 */ }
Если проверяете массивы, то:
if (count($var) === 0) { /* Массив пуст */ }
Вывод: не злоупотребляйте isset() и empty(), а проверяйте переменные строго!
👉 @php_libОптимизация скорости работы PHP кода 🏎️
Сегодня я покажу вам несколько простых, но эффективных способов ускорить выполнение PHP-скриптов. Оптимизация кода – важная часть работы разработчика, ведь никто не любит медленные сайты. 🚀
🔥 1. Избегайте лишних запросов к БД
Частая ошибка – несколько одинаковых запросов к базе данных в одном запросе. Используйте кэширование (
Redis, Memcached), а если данные редко меняются – сохраняйте их в файл.
🔥 2. Используйте isset() вместо array_key_exists()
Функция isset() работает быстрее, чем array_key_exists(), потому что она не только проверяет наличие ключа, но и сразу его значение.
// Медленный вариант
if (array_key_exists('key', $array)) { }
// Быстрый вариант
if (isset($array['key'])) { }
🔥 3. Не злоупотребляйте foreach при больших объемах данных
Если у вас массив с десятками тысяч элементов, попробуйте array_map() или array_walk() – они работают быстрее за счет встроенной оптимизации в C.
🔥 4. Подключайте файлы правильно
Разница между require, include, require_once и include_once может сильно повлиять на производительность. require_once проверяет, был ли уже подключен файл, что замедляет выполнение. Если точно знаете, что файл не дублируется – используйте require.
🔥 5. Включите OPCache
OPCache кэширует байт-код PHP и ускоряет его выполнение в разы. Включите его в php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
🔥 6. Используйте json_encode() вместо serialize()
Функция json_encode() работает быстрее, чем serialize(), и при этом генерирует более компактные данные.
$data = ['name' => 'John', 'age' => 25];
// Медленный вариант
$serialized = serialize($data);
// Быстрый вариант
$json = json_encode($data);
✅ Оптимизация PHP кода — это не магия, а грамотный подход к написанию скриптов. Используйте эти советы, и ваши проекты станут быстрее!
Какой из этих способов уже применяете в своих проектах? Делитесь в комментариях! 👇
👉 @php_lib⚡️ В сети начали массово сливать курсы и книги известных онлайн школ по айти
Вот отсортированная база с тонной материала (постепенно пополняется):
БАЗА (4687 видео/книг):
(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL/БД
(163 видео, 29 книги) — Linux
(114 видео, 77 книги) — Сисадмин
(107 видео, 43 книги) — BA/SA
(181 видео, 32 книги) — Go
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — Дизайн
(129 видео, 73 книги) — QA
(213 видео, 63 книги) — Rust
(121 видео, 24 книги) — 1С
(136 видео, 33 книги) — PM/HR
Скачивать ничего не нужно — все выложили в Telegram
История создания идеального Docker для Laravel
Казалось бы, упаковать PHP в контейнер и настроить GitHub Actions - дело пяти минут. Но как часто бывает, реальность оказалась сложнее. Это история о том, как я вернулся к разработке на PHP и решал накопившиеся проблемы с деплоем Laravel-проекта. О том, как готовил Docker-образ, несколько раз переписывал процесс деплоя, находил компромиссы там, где это было возможно, и полностью перестраивал архитектуру там, где компромиссы были неприемлемы.
https://habr.com/ru/articles/883300/
👉 @php_lib
Релиз PHP 8.4.4 и 8.3.17
https://www.php.net/ChangeLog-8.php
👉 @php_lib
Представляем Rich Text в Laravel
Когда мы создаем формы для приложения, часто возникает необходимость в поле, где обычное текстовое поле (textarea) недостаточно. Как же поступить? Мы могли бы обработать данные на стороне сервера и рассматривать ввод как Markdown, но это требует ручной настройки и часто может быть ограничивающим. Более удачной альтернативой является использование rich text редактора, который предоставляет максимум возможностей для настройки.
https://tighten.com/insights/rich-text-laravel/
👉 @php_lib
👩💻 Программисты на PHP востребованы как никогда! 75% всех сайтов работают на этом языке.
Курс «PHP Developer. Professional» — это глубокое погружение в экосистему PHP. Паттерны проектирования, тестирование, работа с PostgreSQL и Docker, стандарты PSR. Вы научитесь писать чистый код, анализировать производительность и создавать отказоустойчивые решения.
Хотите оказаться среди тех, кто управляет цифровым миром, тогда проходите вступительный тест по PHP прямо сейчас: https://vk.cc/cI1ydM
Работайте на реальных задачах, улучшайте код с экспертами и становитесь Middle+ разработчиком. Наш диплом ценят крупные компании, а знания помогут выделиться среди кандидатов.
➡️ Запиcаться на курс
Приятный бонус Курс можно приобрести в рассрочку и без переплаты
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🔥 Совет по Laravel: wherePivot.
В отношениях "многие-ко-многим" можно добавить операторы
where в таблицу pivot, используя метод `wherePivot`.
👉 @php_libСовет по Laravel 💡
Знаете ли вы, что... вы можете временно отключить
timestamps при сохранении модели?
👉 @php_lib⭐️ Symfony и Kafka — союз, о котором мечтают разработчики!
👉 Узнайте, как интеграция Symfony Messenger с Kafka делает обработку асинхронных задач надёжной и масштабируемой. Мы разберём примеры, лучшие практики и подводные камни.
⏰ Хотите уверенно работать с этой мощной связкой и прокачать свои проекты? 28 января в 20:00 мск вас ждёт открытый урок, где мы расскажем, как настроить и использовать Kafka как транспорт.
Спикер Михаил Каморин — Dev Tech Lead в Skyeng, участник и организатор конференций по PHP, член ПК Podlodka PHP Crew.
👉 Регистрируйтесь на вебинар сейчас и получите скидку на обучение на курсе «Symfony Framework»: https://vk.cc/cHIjAC
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruКэширование аутентифицированных пользователей в Laravel
Для ещё более высокой производительности в Laravel-приложениях с большим трафиком можно кэшировать аутентифицированных пользователей, чтобы избежать обращения к базе данных.
В этой статье я покажу, как это сделать — но это не быстрое исправление: нам нужно будет учесть, что происходит, когда пользователь обновляется или удаляется.
https://codecourse.com/articles/caching-authenticated-users-in-laravel
👉 @php_lib
🛠️Использование Laravel Tinker в Chrome DevTools
Статья о том, как интегрировать Laravel Tinker с Chrome DevTools для более удобной отладки и тестирования кода прямо в браузере.
Это позволяет быстрее проверять и экспериментировать с кодом Laravel, используя привычные инструменты Chrome.
https://www.amitmerchant.com/laravel-tinker-chrome-devtools/
👉 @php_lib
🐘 Тест по PHP
🔥 Проверь насколько хорошо ты знаешь PHP
Ответишь — пройдешь на продвинутый курс "PHP Developer. Professional" от OTUS по специальной цене.
➡️ ПРОЙТИ ТЕСТ: https://vk.cc/cHFfih
Приятный бонус Курс можно приобрести в рассрочку и без переплаты
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruСовет по Laravel 💡
Один из моих любимых недокументированных советов, который я регулярно использую. Используйте "
wasRecentlyCreated", чтобы проверить, была ли модель создана или найдена в базе данных.
👉 @php_lib+1
Genealogy
Бесплатное приложение с открытым исходным кодом (семейное дерево) для записи членов семьи и их взаимоотношений, созданное на PHP (Laravel 10).
https://github.com/MGeurts/genealogy
👉 @php_lib
❓ Ищете способы сделать Bitrix24 ещё мощнее? Мы знаем, как!
На открытом уроке вы узнаете, как интегрировать Bitrix24 с Google Workspace и Microsoft 365:
— Расширьте возможности CRM.
— Автоматизируйте рутинные задачи.
— Улучшите коммуникацию в компании.
Только реальные кейсы, примеры успешных интеграций и рекомендации от эксперта. Участники урока получат скидку на обучение на курсе «Разработчик Битрикс24».
⏰ Не упустите шанс! Встречаемся 27 января в 20:00 мск.
👉 Узнать больше: https://vk.cc/cHzt4Z
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruПолный курс PHP для начинающих и продвинутых
Full PHP 8 Tutorial
How To Install PHP & What Are Web Servers
Basic PHP Syntax
What Are Constants & Variable Variables In PHP
PHP Data Types - Typecasting Overview & How It Works
PHP Boolean Data Type
PHP Integer Data type
PHP Float Data Type
PHP String Data Type - Heredoc & Nowdoc Syntax
PHP Null Data Type
На данный момент доступно 139 видео
👉 @php_lib
Введение в Terminable Middleware
Создание и взаимодействие с middleware - обычная задача для разработчиков Laravel. Вы, вероятно, знакомы с middleware "до" и "после". Middleware "до" может использоваться для аутентификации пользователей, установки языка приложения или ограничения ответов в зависимости от запроса. After middleware может использоваться для добавления cookies или обновления заголовков ответа. В этом посте мы рассмотрим удобный, но менее используемый тип middleware: Terminable middleware.
https://tighten.com/insights/intro-to-terminable-middleware/
👉 @php_lib
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
