Библиотека PHP программиста 👨🏼💻👩💻
описание
Полезные материалы по PHP, Laravel, Symfony, CodeIgniter, CakePHP, Phalcon По всем вопросам @evgenycarter
Лучшие посты
за три месяцаСегодня расскажу вам про одну простую, но очень полезную привычку для любого PHP-разработчика — вести чек-листы по задачам прямо в коде. Когда проект становится чуть больше "визитки", начинают скапливаться мелкие задачи: что-то подправить, где-то доделать, что-то не забыть протестировать. В итоге куча мыслей крутится в голове, а шанс что-то упустить растёт. Как я с этим борюсь? Я просто добавляю короткие TODO-комментарии в нужных местах кода. Например: // TODO: Проверить валидацию email после изменений // TODO: Перевести этот блок на отдельный сервис Каждый раз перед коммитом быстро пробегаюсь по проекту поиском по "TODO" — и вижу все свои маленькие хвосты. А когда задач становится много, использую расширения для IDE (например, "TODO Highlight" в VSCode) — и визуально сразу видно все невыполненные задачи. Почему это работает: * Не надо держать всё в голове. * Любой разработчик быстро вникает в текущие проблемы кода. * Легче планировать рефакторинг. * Сложно забыть про важную доработку. Советую прямо сегодня попробовать добавить пару своих TODO в код. Дай знать, пользуешься ли ты таким приёмом или предпочитаешь другие методы? Пиши в комментариях! 📲 Мы в MAX 👉 @php_lib
💡Совет по Laravel Знаешь ли ты, что можно выбрасывать исключения условно всего в одну строку с помощью throw_if() — идеально для лаконичного кода в контроллерах и сервисах. 📲 Мы в 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
🔥 Полезная фича в Laravel: скрываем данные с помощью 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
Как правильно работать с большими массивами данных в PHP, чтобы не убить память и сервер. Когда мы пишем скрипты, которые обрабатывают тысячи (или миллионы) строк — будь то импорт из 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
Простой, но полезный приём для дебага в Laravel — логирование SQL-запросов в человекочитаемом виде. По умолчанию 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
💡Совет по Laravel: Проверка дат с помощью Carbon Уверен, тебе хоть раз приходилось проверять, истекла ли дата или находится в будущем. Так как Laravel под капотом использует Carbon, у тебя есть доступ к множеству удобных методов, которые позволяют делать это элегантно 🚀 📲 Мы в MAX 👉 @php_lib
📲 Мы в MAX 👉 @php_lib
💡 Совет для Laravel‑разработчиков Используйте Crypt facade — он уже есть в Laravel: - Работает на вашем APP_KEY - Шифрует данные через AES‑256‑CBC - Защищает от подделки (MAC) 🔐 Храните API‑токены, пароли и секреты безопасно — прямо из коробки. 📲 Мы в MAX 👉 @php_lib
Laravel lazy() против get() Знаешь ли ты… что можно обрабатывать большие объёмы данных из базы с помощью lazy() — это гораздо эффективнее по памяти, чем get(). 📲 Мы в MAX 👉 @php_lib
Сегодня хочу поделиться полезной практикой, которая реально экономит время при работе с чужим кодом — быстрая навигация и понимание проекта через composer.json. Когда попадаешь в новый проект, чаще всего первым делом начинаешь блуждать по папкам, читать контроллеры, роуты, сервисы… Но есть более быстрый способ понять архитектуру - сразу открыть composer.json. Что можно сразу понять: - Какие библиотеки используются - а значит, какие фреймворки, ORM, инструменты кеширования или логирования ждут нас внутри. - Какая версия PHP нужна — помогает избежать сюрпризов с несовместимыми функциями. - Автозагрузка - раздел autoload и autoload-dev сразу подскажет, где искать код и как он структурирован. Например, если вижу App\\ => src/, я знаю, что основной код живёт в src. - Скрипты - в scripts иногда прячутся удобные команды для деплоя, генерации, тестов, которые можно запускать через composer run-script. Я часто делаю так: открываю composer.json, сразу строю для себя “карту” проекта и понимаю, где искать бизнес-логику и какие инструменты уже встроены. А вы как знакомитесь с новым проектом? С чего начинаете? 📲 Мы в MAX 👉 @php_lib
Сегодня хочу поделиться темой, которая регулярно спасает мне часы (а иногда и дни) работы — как быстро находить и устранять узкие места в производительности PHP-приложения. Когда проект начинает подтормаживать, первая реакция — «ну, наверное, сервер слабый». А на деле 80% проблем можно найти прямо в коде. Вот мой рабочий чеклист: 1. Включаю профилировщик. Если проект на Laravel — laravel-debugbar или Clockwork. Для чистого PHP — Xdebug или Tideways. Они показывают, какие функции и запросы жрут время. 2. Смотрю SQL-запросы. Удивительно, сколько «тормозов» сидит именно в базе. Часто помогает банальное добавление индексов или переписывание одного запроса. 3. Ищу повторяющиеся операции. Иногда вижу: одна и та же функция дергается в цикле по 1000 раз, хотя результат можно закешировать. 4. Анализирую работу с файлами. Если есть много file_get_contents() или операций с большими файлами — выношу их в фоновые задачи (очереди). 5. Включаю кэширование. Даже простой OPcache и Redis для хранения промежуточных данных творят чудеса. Мой совет: не пытайтесь «оптимизировать на глаз». Всегда начинайте с измерений — профилировщик покажет правду. А вы как ищете и устраняете узкие места? Какие инструменты используете чаще всего? 📲 Мы в MAX 👉 @php_lib
🚀 Подборка полезных 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://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 Питер Новости: Санкт-Петербург / СПБ / ДТП
Нужно ли в PHP перед вызовом функций ставить обратный слэш? Несколько лет назад я прочитал статью «How to dump and inspect PHP OPCodes» в которой наконец увидел, что опкоды в PHP действительно существуют. И кроме того, мы, разработчики, которые пишем на PHP на эти опкоды можем влиять, тем самым оптимизируя производительность нашего кода. В статье так же рассказывалось о том, как применение бэкслэшей может ускорить выполнение программ. Я был под впечатлением... Опкодами (см. Код операции) называется некий промежуточный код, который всё ещё понятен человеку и который выполняется некой исполняющей средой. В случае PHP этой средой является Zend Virtual Machine (она же Zend Engine). https://habr.com/ru/articles/934316/ 📲 Мы в MAX 👉 @php_lib
Совет по PHP/Laravel 🚀 Когда у вас есть два случая для кастомных исключений, относящихся к одному и тому же домену, вместо создания нескольких классов исключений можно использовать один класс с разными методами! Так код будет чище и лучше структурирован! 💪🔥 📲 Мы в MAX 👉 @php_lib
💡Совет по Laravel Знаешь ли ты… о методе skip в планировщике Laravel? С помощью skip() можно указать, когда команда не должна выполняться. 📲 Мы в MAX 👉 @php_lib
💡 Совет по Laravel Не позволяй запросам к базе данных замедлять работу. Используй фасад Cache в Laravel для временного кэширования данных и сокращения количества обращений к базе. 📲 Мы в MAX 👉 @php_lib
- 25 июл.347 просмотров
🚀 Подборка полезных 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 Типичный Сисадмин https://max.ru/channel_win_sysadmin Системный Администратор Windows https://max.ru/channel_linux_admin Linux: Системный администратор https://max.ru/channel_linuxmod Linux https://max.ru/channel_i_linux Системный администратор https://max.ru/channel_devopslib DevOps, SRE, Sysadmin https://max.ru/channel_devops_star DevOps Star (Звезда Девопса) Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак Английский с нуля 🇬🇧 https://max.ru/UchuEnglish 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С https://max.ru/channel_DevLab1C 1С:Предприятие 8 Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика https://max.ru/channel_cpp_geek C++ geek Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Rust📌 https://max.ru/channel_rust_lib Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика https://max.ru/channel_java_geek Java Geek 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 Обучающие видео, книги по Физике и Математике Вакансии в IT📌 https://max.ru/progjob https://max.ru/channel_rabotait Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП
Сегодня хочу поделиться одной небольшой, но очень полезной привычкой, которая здорово экономит время в работе с PHP-проектами. Когда я только начинал, я постоянно забывал про php artisan tinker (если речь про Laravel) или встроенный интерактивный шелл php -a. А ведь это супер-удобный способ быстро проверить кусок кода, протестировать работу функции или глянуть, что вернет тот или иной запрос. Например, нужно быстро понять, как работает кастомный accessor в модели? Вместо того чтобы городить временные роуты или var_dump-ить в контроллере - открываешь tinker: php artisan tinker И сразу работаешь с моделью: $user = App\Models\User::find(1); $user->profile->full_name; Буквально за пару секунд получаешь ответ, без лишнего мусора в коде. Еще круто использовать tinker для тестирования сервисов или вызова хелперов. Иногда я даже проверяю SQL-запросы через Eloquent, чтобы потом использовать их в сидерах или тестах. Короче, мой совет: если еще не используете — приучите себя чаще заходить в tinker. Это ваш "быстрый песочница", которая всегда под рукой. А вы как чаще отлаживаете код в Laravel - через tinker, dd() или дебаггер в IDE? Напишите в комментах, будет интересно сравнить! 📲 Мы в MAX 👉 @php_lib
🚀 Подборка полезных 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 Типичный Сисадмин https://max.ru/channel_win_sysadmin Системный Администратор Windows https://max.ru/channel_linux_admin Linux: Системный администратор https://max.ru/channel_linuxmod Linux https://max.ru/channel_i_linux Системный администратор https://max.ru/channel_devopslib DevOps, SRE, Sysadmin https://max.ru/channel_devops_star DevOps Star (Звезда Девопса) Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак Английский с нуля 🇬🇧 https://max.ru/UchuEnglish 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С https://max.ru/channel_DevLab1C 1С:Предприятие 8 Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика https://max.ru/channel_cpp_geek C++ geek Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Rust📌 https://max.ru/channel_rust_lib Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика https://max.ru/channel_java_geek Java Geek 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 Обучающие видео, книги по Физике и Математике Вакансии в IT📌 https://max.ru/progjob https://max.ru/channel_rabotait Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Городские📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП https://max.ru/channel_krasnodar_novosty Краснодар Новости https://max.ru/channel_novosibirsk_novosti Новосибирск https://max.ru/channel_samara_novosti Новости Самары https://max.ru/channel_ekaterinburg_novosti Новости Екатеринбурга https://max.ru/channel_kazan_novosti Новости Казани https://max.ru/channel_omsk_novosti Новости Омска https://max.ru/channel_moskva_24 Москва 24