ch
Feedback
Библиотека PHP программиста 👨🏼‍💻👩‍💻

Библиотека PHP программиста 👨🏼‍💻👩‍💻

前往频道在 Telegram

Полезные материалы по PHP, Laravel, Symfony, CodeIgniter, CakePHP, Phalcon По всем вопросам @evgenycarter

显示更多
2 094
订阅者
-224 小时
-47
-1130
帖子存档
Как бороться с «загадочными» багами в 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

История создания идеального Docker для Laravel Казалось бы, упаковать PHP в контейнер и настроить GitHub Actions - дело пяти
История создания идеального Docker для Laravel Казалось бы, упаковать PHP в контейнер и настроить GitHub Actions - дело пяти минут. Но как часто бывает, реальность оказалась сложнее. Это история о том, как я вернулся к разработке на PHP и решал накопившиеся проблемы с деплоем Laravel-проекта. О том, как готовил Docker-образ, несколько раз переписывал процесс деплоя, находил компромиссы там, где это было возможно, и полностью перестраивал архитектуру там, где компромиссы были неприемлемы. https://habr.com/ru/articles/883300/ 👉 @php_lib

Представляем Rich Text в Laravel Когда мы создаем формы для приложения, часто возникает необходимость в поле, где обычное тек
Представляем Rich Text в Laravel Когда мы создаем формы для приложения, часто возникает необходимость в поле, где обычное текстовое поле (textarea) недостаточно. Как же поступить? Мы могли бы обработать данные на стороне сервера и рассматривать ввод как Markdown, но это требует ручной настройки и часто может быть ограничивающим. Более удачной альтернативой является использование rich text редактора, который предоставляет максимум возможностей для настройки. https://tighten.com/insights/rich-text-laravel/ 👉 @php_lib

👩‍💻 Программисты на PHP востребованы как никогда! 75% всех сайтов работают на этом языке. Курс «PHP Developer. Professional
👩‍💻 Программисты на PHP востребованы как никогда! 75% всех сайтов работают на этом языке. Курс «PHP Developer. Professional» — это глубокое погружение в экосистему PHP. Паттерны проектирования, тестирование, работа с PostgreSQL и Docker, стандарты PSR. Вы научитесь писать чистый код, анализировать производительность и создавать отказоустойчивые решения. Хотите оказаться среди тех, кто управляет цифровым миром, тогда проходите вступительный тест по PHP прямо сейчас: https://vk.cc/cI1ydM Работайте на реальных задачах, улучшайте код с экспертами и становитесь Middle+ разработчиком. Наш диплом ценят крупные компании, а знания помогут выделиться среди кандидатов. ➡️ Запиcаться на курс Приятный бонус Курс можно приобрести в рассрочку и без переплаты Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

🔥 Совет по Laravel: wherePivot. В отношениях "многие-ко-многим" можно добавить операторы where в таблицу pivot, используя ме
🔥 Совет по Laravel: wherePivot. В отношениях "многие-ко-многим" можно добавить операторы where в таблицу pivot, используя метод `wherePivot`. 👉 @php_lib

Совет по Laravel 💡 Знаете ли вы, что... вы можете временно отключить timestamps при сохранении модели? 👉 @php_lib
Совет по Laravel 💡 Знаете ли вы, что... вы можете временно отключить timestamps при сохранении модели? 👉 @php_lib

⭐️ Symfony и Kafka — союз, о котором мечтают разработчики! 👉 Узнайте, как интеграция Symfony Messenger с Kafka делает обрабо
⭐️ 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-приложениях с боль
Кэширование аутентифицированных пользователей в Laravel Для ещё более высокой производительности в Laravel-приложениях с большим трафиком можно кэшировать аутентифицированных пользователей, чтобы избежать обращения к базе данных. В этой статье я покажу, как это сделать — но это не быстрое исправление: нам нужно будет учесть, что происходит, когда пользователь обновляется или удаляется. https://codecourse.com/articles/caching-authenticated-users-in-laravel 👉 @php_lib

🛠️Использование Laravel Tinker в Chrome DevTools Статья о том, как интегрировать Laravel Tinker с Chrome DevTools для более
🛠️Использование 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
🐘 Тест по PHP 🔥 Проверь насколько хорошо ты знаешь PHP Ответишь — пройдешь на продвинутый курс "PHP Developer. Professional" от OTUS по специальной цене. ➡️ ПРОЙТИ ТЕСТ: https://vk.cc/cHFfih Приятный бонус Курс можно приобрести в рассрочку и без переплаты Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Совет по Laravel 💡 Один из моих любимых недокументированных советов, который я регулярно использую. Используйте "wasRecentlyCreated", чтобы проверить, была ли модель создана или найдена в базе данных. 👉 @php_lib

Genealogy Бесплатное приложение с открытым исходным кодом (семейное дерево) для записи членов семьи и их взаимоотношений, соз
+1
Genealogy Бесплатное приложение с открытым исходным кодом (семейное дерево) для записи членов семьи и их взаимоотношений, созданное на PHP (Laravel 10). https://github.com/MGeurts/genealogy 👉 @php_lib

❓ Ищете способы сделать Bitrix24 ещё мощнее? Мы знаем, как! На открытом уроке вы узнаете, как интегрировать Bitrix24 с Google
❓ Ищете способы сделать Bitrix24 ещё мощнее? Мы знаем, как! На открытом уроке вы узнаете, как интегрировать Bitrix24 с Google Workspace и Microsoft 365: — Расширьте возможности CRM. — Автоматизируйте рутинные задачи. — Улучшите коммуникацию в компании. Только реальные кейсы, примеры успешных интеграций и рекомендации от эксперта. Участники урока получат скидку на обучение на курсе «Разработчик Битрикс24». ⏰ Не упустите шанс! Встречаемся 27 января в 20:00 мск. 👉 Узнать больше: https://vk.cc/cHzt4Z Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

+9
Полный курс 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. Вы, вероя
Введение в Terminable Middleware Создание и взаимодействие с middleware - обычная задача для разработчиков Laravel. Вы, вероятно, знакомы с middleware "до" и "после". Middleware "до" может использоваться для аутентификации пользователей, установки языка приложения или ограничения ответов в зависимости от запроса. After middleware может использоваться для добавления cookies или обновления заголовков ответа. В этом посте мы рассмотрим удобный, но менее используемый тип middleware: Terminable middleware. https://tighten.com/insights/intro-to-terminable-middleware/ 👉 @php_lib