Сегодня я покажу вам, как быстро разрулить хаос в проекте с кастомным фреймворком, где нет нормального логирования.
Ситуация: клиент дал старый проект, ошибок — куча, но логов нет вообще. В коде try-catch, а в catch — пусто. Что делать?
Вот мой быстрый чеклист, который спасал не раз:
1. Глобальный обработчик ошибок и исключений
set_error_handler(function ($errno, $errstr, $errfile, $errline) {
error_log("[PHP ERROR] $errstr in $errfile:$errline");
return false;
});
set_exception_handler(function (Throwable $e) {
error_log("[UNCAUGHT EXCEPTION] " . $e->getMessage() . ' in ' . $e->getFile() . ':' . $e->getLine());
});
Добавил в index.php, и уже вижу, что именно валится.
2. Простой логгер на каждый чих
Создал файл logger.php:
function log_debug($msg) {
file_put_contents(__DIR__.'/debug.log', date('[Y-m-d H:i:s] ') . $msg . PHP_EOL, FILE_APPEND);
}
В нужных местах пишу log_debug('что-то случилось');. Дёшево и сердито, зато работает.
3. Прокинул заголовки и запросы
В самых первых строках запроса:
log_debug("REQUEST: " . $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI']);
log_debug("HEADERS: " . json_encode(getallheaders()));
log_debug("POST: " . json_encode($_POST));
Теперь видно, с чем именно клиент ломает мой старый код.
Не всегда есть время подтягивать Monolog и делать всё красиво. Иногда нужно быстро найти, где горит — и потушить. А уже потом наводить красоту.
А вы как действуете в таких ситуациях? Есть свои приёмы?
👉 [|@php_be1]
Ситуация: клиент дал старый проект, ошибок — куча, но логов нет вообще. В коде try-catch, а в catch — пусто. Что делать?
Вот мой быстрый чеклист, который спасал не раз:
1. Глобальный обработчик ошибок и исключений
set_error_handler(function ($errno, $errstr, $errfile, $errline) {
error_log("[PHP ERROR] $errstr in $errfile:$errline");
return false;
});
set_exception_handler(function (Throwable $e) {
error_log("[UNCAUGHT EXCEPTION] " . $e->getMessage() . ' in ' . $e->getFile() . ':' . $e->getLine());
});
Добавил в index.php, и уже вижу, что именно валится.
2. Простой логгер на каждый чих
Создал файл logger.php:
function log_debug($msg) {
file_put_contents(__DIR__.'/debug.log', date('[Y-m-d H:i:s] ') . $msg . PHP_EOL, FILE_APPEND);
}
В нужных местах пишу log_debug('что-то случилось');. Дёшево и сердито, зато работает.
3. Прокинул заголовки и запросы
В самых первых строках запроса:
log_debug("REQUEST: " . $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI']);
log_debug("HEADERS: " . json_encode(getallheaders()));
log_debug("POST: " . json_encode($_POST));
Теперь видно, с чем именно клиент ломает мой старый код.
Не всегда есть время подтягивать Monolog и делать всё красиво. Иногда нужно быстро найти, где горит — и потушить. А уже потом наводить красоту.
А вы как действуете в таких ситуациях? Есть свои приёмы?
👉 [|@php_be1]
Релиз PHP 8.5.0 Alpha 1
Это первый тестовый билд новой версии языка.
https://www.php.net/archive/2025.php#2025-07-03-5
@php_be1
Это первый тестовый билд новой версии языка.
https://www.php.net/archive/2025.php#2025-07-03-5
@php_be1
Как интегрировать Google Cloud Storage в Laravel
https://www.luckymedia.dev/blog/how-to-integrate-google-cloud-storage-with-laravel
@php_be1
https://www.luckymedia.dev/blog/how-to-integrate-google-cloud-storage-with-laravel
@php_be1
Атрибут #[\NoDiscard] в PHP 8.5
@php_be1
https://www.amitmerchant.com/the-nodiscard-attribute-in-php-85/
@php_be1
https://www.amitmerchant.com/the-nodiscard-attribute-in-php-85/
Amit Merchant - A blog on PHP, JavaScript, and more
Stop Ignoring Important Returns with PHP 8.5’s `#[\NoDiscard]` Attribute
When writing functions or methods in PHP, we often return values that are crucial for the caller to handle. Usually, those returned values need to be consumed. Check the following example.
Всё, что появится в PHP 8.5
@php_be1
https://www.amitmerchant.com/everything-that-is-coming-in-php-85/
@php_be1
https://www.amitmerchant.com/everything-that-is-coming-in-php-85/
Amit Merchant - A blog on PHP, JavaScript, and more
Everything that is coming in PHP 8.5
As every year, we will have the new version of PHP this year too, which is PHP 8.5. It’s the minor version in the PHP 8 line, and the version will be released later this year. Let’s discuss everything that has been added in PHP 8.5 so far.
4 дня назад вышел новый стандарт стиля кода - PER-CS v3.0 (https://www.php-fig.org/per/coding-style/)
Документ миграции с версии PER-CS 2.0 можно найти здесь (https://github.com/php-fig/per-coding-style/blob/master/migration-3.0.md).
https://github.com/php-fig/per-coding-style/releases/tag/3.0.0
@php_be1
Документ миграции с версии PER-CS 2.0 можно найти здесь (https://github.com/php-fig/per-coding-style/blob/master/migration-3.0.md).
https://github.com/php-fig/per-coding-style/releases/tag/3.0.0
@php_be1
MoonVibe: генератор админ-панелей на основе ИИ за 5 минут
@php_be1
https://habr.com/ru/articles/929268/
@php_be1
https://habr.com/ru/articles/929268/
Хабр
MoonVibe: генератор админ-панелей на основе ИИ за 5 минут
Привет, друзья! Сегодня расскажу новом инструменте для MoonShine , который может серьезно изменить ваш подход к созданию админ-панелей. MoonVibe — генератор на основе LLM, который умеет создавать...
Плагин Laravel Idea стал бесплатным
@php_be1
https://blog.jetbrains.com/phpstorm/2025/07/laravel-idea-is-now-free/
@php_be1
https://blog.jetbrains.com/phpstorm/2025/07/laravel-idea-is-now-free/
The JetBrains Blog
The Laravel Idea Plugin is Now Free for PhpStorm Users | The PhpStorm Blog
Starting July 30, 2025, we’re making Laravel Idea free for PhpStorm users. If you have the Laravel Idea plugin installed, you get full access to all plugin features at no extra cost.
💡Совет по Laravel: Проверка дат с помощью Carbon
Уверен, тебе хоть раз приходилось проверять, истекла ли дата или находится в будущем.
Так как Laravel под капотом использует Carbon, у тебя есть доступ к множеству удобных методов, которые позволяют делать это элегантно 🚀
👉 [|@php_be1]
Уверен, тебе хоть раз приходилось проверять, истекла ли дата или находится в будущем.
Так как Laravel под капотом использует Carbon, у тебя есть доступ к множеству удобных методов, которые позволяют делать это элегантно 🚀
👉 [|@php_be1]
Laravel Rate Limiting — Explained with Real-Life Examples
https://backpackforlaravel.com/articles/tutorials/laravel-rate-limiting-explained-with-real-life-examples
@php_be1
https://backpackforlaravel.com/articles/tutorials/laravel-rate-limiting-explained-with-real-life-examples?utm_campaign=laravelnews&utm_medium=link&utm_source=laravelnews
https://backpackforlaravel.com/articles/tutorials/laravel-rate-limiting-explained-with-real-life-examples
@php_be1
https://backpackforlaravel.com/articles/tutorials/laravel-rate-limiting-explained-with-real-life-examples?utm_campaign=laravelnews&utm_medium=link&utm_source=laravelnews
Backpack
Laravel Rate Limiting — Explained with Real-Life Examples
Imagine this — your app is running smoothly, then suddenly it gets hit with a wave of requests. Some from real users, others from bots...