PHP компилирует каждый .php-файл в байткод при каждом запросе — если не настроен OPcache. Это означает лишние CPU-циклы на парсинг даже самого тривиального хелпера.
; включаем
opcache.enable=1
opcache.enable_cli=1
; кол-во кешируемых файлов (>= числа файлов в проекте)
opcache.max_accelerated_files=20000
; размер разделяемой памяти (MB)
opcache.memory_consumption=256
; кешируем строки — экономим RAM
opcache.interned_strings_buffer=16
; в продакшне: 0 (не проверять изменения файлов)
opcache.validate_timestamps=0
Почему validate\_timestamps=0 в проде
При каждом запросе PHP проверяет mtime файла на диске. На высоких RPS — это сотни лишних stat()-syscall'ов в секунду. Инвалидируйте кеш вручную через opcache_reset() или перезапуск PHP-FPM при деплое.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁31🥱3❤2💯2
В PHP 8.5 появилась малоизвестная CLI-опция:
php --ini=diff
Она показывает только настройки, которые отличаются от стандартной конфигурации PHP.
Полезно, когда нужно:
— разобраться, чем production отличается от дефолта;
— проверить Docker-образ;
— перенести конфигурацию на новый сервер.
Особенно удобно вместо ручного сравнения огромного php.ini.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥3
В PHP 8.3 появился атрибут #[Override], который помогает ловить ошибки при переопределении методов.
Если метода find() нет в родительском классе или интерфейсе, PHP сообщит об ошибке.
Полезно при рефакторинге: переименовал метод в базовом классе — наследники не останутся с «тихо сломанным» override.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Вместо массивов вроде:
$email = $data['email'];
$quantity = $data['quantity’];
class OrderData extends Data
{
public function __construct(
public string $email,
public int $quantity,
public ?string $promoCode = null,
) {}
}
$order = OrderData::from($request->all());
echo $order->email;
Дальше работают обычные типы PHP и автодополнение IDE, а laravel-data добавляет маппинг, валидацию, вложенные DTO и преобразование обратно в массив или JSON.
Удобный вариант, когда DTO в Laravel становится больше, чем просто набором полей.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13😁4
Такой вызов приходится расшифровывать:
createUser('Аня', true, false, true);
С PHP 8.0 можно передать аргументы по имени:
createUser(
name: 'Аня',
isAdmin: true,
sendEmail: false,
verified: true,
);
Сигнатуру метода менять не нужно — именованные аргументы работают прямо с существующими параметрами.
createUser(
name: 'Аня',
verified: true,
);
Никаких зависимостей — просто вызов, который сам объясняет, что именно происходит.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱16👍12
В новой версии Telescope искать и разбирать записи можно без открытия dashboard.
php artisan telescope:list request
php artisan telescope:show latest:request
php artisan telescope:list exception --limit=5
php artisan telescope:list request --tag=Auth:42
php artisan telescope:list --batch=79a09461
php artisan telescope:show latest:exception
Для скриптов и coding agents есть --json:
php artisan telescope:show latest:exception --json
А --full отключает сокращение длинных SQL, сообщений и payload’ов.
В 5.24 также исправили stale-запросы dashboard: при навигации старый polling-запрос больше не должен перезаписывать уже открытый экран.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥2👍1
Что реально хочется разобрать? Где чаще всего застреваете? Что пробовали, но так и не получилось нормально внедрить?
Задавайте всё, что давно хотелось спросить
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🔐 Sqids в Laravel: короткие публичные ID
Автоинкрементные ID удобны в базе, но не всегда подходят для публичных URL.
Sqids превращают их в короткие строки:
При этом внутри Laravel остаются обычные integer-ключи, связи Eloquent и индексы.
В статье показано, как встроить Sqids в:
🟡 route model binding;
🟡 API Resources;
🟡 foreign keys;
🟡 входящие запросы.
🔗 Документация
🐸 Библиотека пхпшника
Автоинкрементные ID удобны в базе, но не всегда подходят для публичных URL.
Sqids превращают их в короткие строки:
637 → 4nxk2a
При этом внутри Laravel остаются обычные integer-ключи, связи Eloquent и индексы.
В статье показано, как встроить Sqids в:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3😢1
This media is not supported in your browser
VIEW IN TELEGRAM
С 14 сентября цены в Proglib Academy вырастут
Так что если курс давно ждёт своего часа — лучше не откладывать ещё на месяц
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5🌚3
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6💯4😁1
Stripe, PayPal, Paystack и другие платёжные системы — через один интерфейс. PayZephyr объединяет работу с 8 провайдерами и предлагает:
— единый API для платежей;
— переключение между провайдерами и failover;
— защиту от повторного списания;
— проверку подписей вебхуков;
— возвраты и подписки.
Payment::amount(100)
->currency('USD')
->pay();
Payment::refund($paymentId);
composer require payzephyr/laravel
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4👍3
Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода.
— когда дорогая модель действительно нужна, а когда хватит дешёвой;
— сколько стоит один прогон и куда уходят токены;
— какие задачи можно отдавать субагентам;
— как настроить маршрутизацию моделей;
— что проверять в AI-коде перед merge.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1