Библиотека PHP программиста 👨🏼‍💻👩‍💻
2.18K subscribers
344 photos
169 videos
7 files
343 links
Полезные материалы по PHP, Laravel, Symfony, CodeIgniter, CakePHP, Phalcon

По всем вопросам @evgenycarter
Download Telegram
Сегодня хочу поделиться темой, которая регулярно спасает мне часы (а иногда и дни) работы — как быстро находить и устранять узкие места в производительности PHP-приложения.

Когда проект начинает подтормаживать, первая реакция — «ну, наверное, сервер слабый». А на деле 80% проблем можно найти прямо в коде. Вот мой рабочий чеклист:

1. Включаю профилировщик.
Если проект на Laravel — laravel-debugbar или Clockwork. Для чистого PHP — Xdebug или Tideways. Они показывают, какие функции и запросы жрут время.

2. Смотрю SQL-запросы.
Удивительно, сколько «тормозов» сидит именно в базе. Часто помогает банальное добавление индексов или переписывание одного запроса.

3. Ищу повторяющиеся операции.
Иногда вижу: одна и та же функция дергается в цикле по 1000 раз, хотя результат можно закешировать.

4. Анализирую работу с файлами.
Если есть много file_get_contents() или операций с большими файлами — выношу их в фоновые задачи (очереди).

5. Включаю кэширование.
Даже простой OPcache и Redis для хранения промежуточных данных творят чудеса.

Мой совет: не пытайтесь «оптимизировать на глаз». Всегда начинайте с измерений — профилировщик покажет правду.

А вы как ищете и устраняете узкие места? Какие инструменты используете чаще всего?

👉 @php_lib
👍15
Сегодня хочу поговорить о ситуации, с которой сталкивался, думаю, каждый PHP-разработчик — "магическое" исчезновение переменных.
Да, вот эти моменты, когда ты уверен, что $userData тут точно есть… а в реальности — Undefined variable: userData.

Причина часто банальна — область видимости.
Многие забывают, что переменные в PHP живут в контексте, где они созданы. Например, внутри функции нельзя просто так достучаться до переменной, объявленной снаружи — она там не существует.

Пример:


$userName = 'Иван';

function greet() {
echo "Привет, $userName"; // Ошибка!
}

greet();


Чтобы это работало, у нас есть три пути:

1. Передать параметром:


function greet($name) {
echo "Привет, $name";
}

greet($userName);


2. Использовать global (но я не советую — код становится менее предсказуемым):


global $userName;


3. Замыкание с use:


$userName = 'Иван';

$greet = function() use ($userName) {
echo "Привет, $userName";
};

$greet();


💡 Совет: всегда старайтесь передавать данные явно - это делает код чище и облегчает тестирование.

А вы как решаете проблему передачи переменных между функциями и методами? Используете глобальные, DI или что-то ещё?

👉 @php_lib
🤡7👍6
Нужно ли в PHP перед вызовом функций ставить обратный слэш?

Несколько лет назад я прочитал статью «How to dump and inspect PHP OPCodes» в которой наконец увидел, что опкоды в PHP действительно существуют. И кроме того, мы, разработчики, которые пишем на PHP на эти опкоды можем влиять, тем самым оптимизируя производительность нашего кода. В статье так же рассказывалось о том, как применение бэкслэшей может ускорить выполнение программ. Я был под впечатлением...

Опкодами (см. Код операции) называется некий промежуточный код, который всё ещё понятен человеку и который выполняется некой исполняющей средой. В случае PHP этой средой является Zend Virtual Machine (она же Zend Engine).

https://habr.com/ru/articles/934316/

👉 @php_lib
👍7🔥2
🔧 Сложности с масштабированием консьюмеров в RabbitMQ? Узнайте, как избежать ошибок, которые могут привести к потерям в порядке обработки сообщений.

📅 На открытом уроке 21 августа в 20:00 МСК разберём реальные кейсы и покажем, как правильно масштабировать консьюмеры, сохраняя порядок обработки. Узнаете, какие проблемы могут возникнуть при некорректном масштабировании и как их решить.

🎯 Получите ценные знания по прогнозированию и устранению проблем, повысите производительность системы и избегайте критических ошибок.

🚀 Посетите вебинар и получите скидку на полный курс «Symfony Framework»! Регистрация открыта: https://vk.cc/cOwLiZ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
💡 Совет по Laravel

Передавайте большие файлы без перебоев, используя потоки.

👉 @php_lib
👍5
💡 Совет по Laravel

Не позволяй запросам к базе данных замедлять работу. Используй фасад Cache в Laravel для временного кэширования данных и сокращения количества обращений к базе.

👉 @php_lib
👍10
Сегодня хочу поделиться одной небольшой, но очень полезной привычкой, которая здорово экономит время в работе с 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? Напишите в комментах, будет интересно сравнить!

👉 @php_lib
👍101👎1🤔1
🚀 Почему стоит выбрать Symfony для разработки?

🔹 Модульность и компоненты — независимые части, которые можно использовать отдельно, ускоряя развитие и повышая гибкость.
🔹 Гибкая настройка — высокий уровень кастомизации, поддержка Dependency Injection для сложных проектов.
🔹 Надежность и поддержка — LTS-версии до 3 лет, стабильность и регулярные обновления для бизнеса.
🔹 Инструменты разработки — Symfony CLI, профайлер, генераторы кода, автоконфигурация — ускоряют работу и отладку.
🔹 Сообщество и документация — большое сообщество, обучающие материалы, рецепты и мероприятия помогают быстро освоить и решать задачи.

🧩 Где используют? — Spotify, BlaBlaCar, Dailymotion, а также компоненты Symfony используют Laravel и другие фреймворки.

Выбирайте Symfony — создавайте масштабируемые, гибкие и надежные проекты!

Пройдите тест, получите скидку на курс «Symfony Framework» и станьте востребованным PHP-разработчиком с передовыми навыками: https://vk.cc/cOTLs6

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Gemini API PHP Client

Клиент Google Gemini API для PHP позволяет вам использовать модель искусственного интеллекта Gemini.

Установка

composer require gemini-api-php/client


Базовая генерация текста


use GeminiAPI\Client;
use GeminiAPI\Resources\Parts\TextPart;

$client = new Client('GEMINI_API_KEY');
$response = $client->geminiPro()->generateContent(
new TextPart('PHP in less than 100 chars'),
);

print $response->text();
// PHP: A server-side scripting language used to create dynamic web applications.
// Easy to learn, widely used, and open-source.


https://github.com/gemini-api-php/client

👉 @php_lib
👍8
Каким мог бы быть Laravel WebServer, если бы он работал через очередь?

Привет! Сегодня я хочу поделиться с вами одной интересной идеей — а что если Laravel WebServer принимал бы все HTTP-запросы не напрямую, а через обычную очередь задач Laravel Queue? Вместо привычных PHP-FPM, Swoole, RoadRunner или FrankenPHP — весь запрос обрабатывался бы как задача в очереди.

Звучит странно? Давайте разбираться, как это могло бы работать и что из этого получилось бы.

https://laravel.su/p/kakim-mog-by-byt-laravel-webserver-esli-by-on-rabotal-cerez-ocered

👉 @php_lib
👍6👎1
💡 Совет по Laravel

Нужно проверить, что в вашем вводе существуют определённые ключи массива?

Используйте required_array_keys, чтобы убедиться, что в данных массива присутствуют конкретные ключи - идеально подходит для API-эндпоинтов, которые ожидают строгую структуру данных.

Ссылка на документацию: https://laravel.com/docs/12.x/validation#rule-required-array-keys

👉 @php_lib
👍5
Сегодня хочу поговорить про одну проблему, с которой я сталкивался сам и вижу её у других PHP-разработчиков - “магия” в коде.

Что я имею в виду? Это когда ты открываешь проект, а там сервисы создаются «сами собой», данные в объект попадают неизвестно откуда, а половина зависимостей подтягивается где-то «под капотом».
Вроде удобно - меньше кода писать. Но вот через пару месяцев ты сам же сидишь и думаешь: «А откуда вообще берётся этот объект? И почему тут такая зависимость?»

🔹 Основная проблема магии - она убивает явность кода. Чем больше скрытых механизмов, тем сложнее поддерживать проект и подключать новых разработчиков.

Примеры из практики:

- Использование глобальных хелперов вместо DI.
- Автоматический вызов методов через __call или __get.
- Массовая магия в Laravel (facades, hidden bindings и т.д.).

🛠 Что можно сделать:

1. Минимизировать скрытые механизмы - лучше написать чуть больше явного кода.
2. Использовать контейнер зависимостей, но регистрировать их явно.
3. Документировать «точки входа» и договориться в команде, где магия допустима, а где нет.

Когда код становится предсказуемым, ты меньше тратишь времени на дебаг, быстрее понимаешь чужие изменения и увереннее двигаешься вперёд.

А как у вас в проектах? Вы за явный код или любите, когда всё работает «само»?

👉 @php_lib
👍9
💡Знал ли вы, что…

Метод Number::abbreviate в Laravel преобразует сложные числа в удобочитаемый формат:

👉 @php_lib
👍101
💡Совет по Laravel

Определение языка пользователя

Laravel использует компонент HttpFoundation из Symfony, который предоставляет полезные возможности. Если вы работаете с локализацией и нужно определить предпочитаемый язык пользователя, просто вызовите метод getPreferredLanguage 🚀

👉 @php_lib
👍5
Совет по Laravel💡

Знаете ли вы... В Laravel есть метод `withProgressBar()`, который позволяет добавлять прогресс-бары к консольным командам.

#Laravel

👉 @php_lib
👍7
🚫 Хватит бороться с монолитом!
Узнайте, как создавать масштабируемые и гибкие приложения на PHP и Symfony.


🎯 На открытом уроке разберем современную event-driven архитектуру:
— Symfony Messenger: обработка событий синхронно и асинхронно.
— CQRS: разделение команд и запросов для производительности.
— Event Sourcing: как хранить историю всех изменений состояния.

Поймем, в каких проектах эти подходы действительно необходимы, и посмотрим на живой код.

💡 Вебинар будет полезен:
— PHP и Symfony-разработчикам, растущим до уровня мидл+ и сеньоров.
— Тимлидам и архитекторам, планирующим устойчивые к нагрузкам системы.
— Начинающим специалистам, чтобы увидеть перспективы развития.

📅 Регистрируйтесь на бесплатный вебинар «Event-driven архитектура в PHP и Symfony» 1 октября в 20:00!:

https://vk.cc/cPQvA3


Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Вы когда-нибудь импортировали несколько классов из одного пространства имён вот так?

Это изящный ход или грязная ошибка? Делись мнением в комментариях!

#Laravel

👉 @php_lib
👎8👍4🤷‍♂3
🚀 Если производительность является приоритетом в вашем проекте, возможно, стоит полностью отключить lazy loading.

Eloquent выбросит огромное исключение, если вы попытаетесь обратиться к связи, которая не была загружена заранее (eager-loaded).

👉 @php_lib
👍2😁1
🔥 PHP-разработчики, готовы прокачать Laravel до уровня, на который другие тратят годы?

Онлайн курс «Framework Laravel» - ваш шанс за 3 месяца освоить фреймворк, который делает разработку проще, быстрее и интереснее.
Какие преимущества обучения по Laravel:

• Laravel ускоряет разработку за счет элегантного синтаксиса, богатой экосистемы и инструментов Artisan.
• Интуитивный ORM Eloquent упрощает работу с данными и повышает читаемость кода.
• Фреймворк масштабируется от MVP до высоконагруженных систем, имеет встроенные средства оптимизации, легко интегрируется с Vue/React/Angular, поддерживается активным сообществом и подтвержден практикой крупных компаний.


Также приглашаем вас на бесплатный вебинар «Advanced Eloquent Relations в Laravel»
🗓 7 октября, 20:00

На вебинаре:

• Кастомные отношения в Laravel Eloquent — от Post до Comment и Author
• Использование отношений за пределами реляционных БД
• Практика на реальных примерах

Кто придёт первым - освоит секреты продвинутого Laravel и научится создавать отношения там, где другие даже не думают их строить.

Записаться на вебинар: https://vk.cc/cQ0xUP


Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Совет по Laravel💡

Знаете ли вы .... tap() = Tweak and Return 🪄

Да, в Laravel метод tap() позволяет изменить объект и вернуть его обратно — идеально для чистого и читаемого кода.

👉 @php_lib
👍6