en
Feedback
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter

Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter

Open in Telegram

Все самое полезное для пхпшника в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/bca892d6 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b

Show more

📈 Analytical overview of Telegram channel Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter

Channel Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter (@phpproglib) in the Russian language segment is an active participant. Currently, the community unites 10 698 subscribers, ranking 11 609 in the Technologies & Applications category and 61 312 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 10 698 subscribers.

According to the latest data from 09 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -40 over the last 30 days and by 0 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 15.51%. Within the first 24 hours after publication, content typically collects 8.98% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 1 659 views. Within the first day, a publication typically gains 961 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 11.
  • Thematic interests: Content is focused on key topics such as php, laravel, пхпшника, artisan, api.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
Все самое полезное для пхпшника в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/bca892d6 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b

Thanks to the high frequency of updates (latest data received on 10 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

10 698
Subscribers
No data24 hours
-167 days
-4030 days
Posts Archive
📌 Зачем дата-сайентисту матанализ? Основная компетенция специалиста по Data Science – способность анализировать и интерпрети
+6
📌 Зачем дата-сайентисту матанализ? Основная компетенция специалиста по Data Science – способность анализировать и интерпретировать данные, а математика является фундаментом для начала работы. В карточках мы разбираем основные разделы математики, с которых стоит начать изучение специалисту по анализу данных. Хотите подготовиться к офферу или подтянуть знания? Оставляйте заявку на наш курс по математике для Data Science 💙 P.S. Только до 31 мая на курс (и вообще на все программы Академии) действует СКИДКА 40% А как у вас дела с высшей математикой? ❤️ — Помню всё 🔥 — Знаю основы 🌚 — Ничего не знаю 🏃‍♀️ Proglib Academy

⚔️ nwidart vs internachi Считается, что internachi/modular быстрее nwidart/laravel-modules, потому что тащит модули через нативный Composer, а не сканирует module.json. Автор прогнал 50 запросов на батч от 25 до 200 модулей на Laravel 13 / PHP 8.4 — и цифры рушат это утверждение. ⚡️ Что показал замер с OPcache ON: — на 25–175 модулях nWidart стабильно быстрее по бутстрапу (+12 мс на каждые 25 модулей, линейно); — у internachi на 75–100 модулях нелинейный спайк от резолва classmap; — перелом наступает только на 200 модулях, где modules:cache даёт 621 мс против 1521 мс у nWidart — в 2.4 раза быстрее; — по памяти internachi выигрывает всегда: на 10–12 МБ меньше на запрос (registry nWidart живёт в куче, classmap — в shared memory OPcache). OPcache режет время бута у internachi на ~49%, у nWidart — только на ~33%. Логично: байткод кэшируется, а чтение module.json на каждом запросе — нет. 📊 Инженерный вывод: до 50 модулей разница в пределах шума, можно руководствоваться удобством DX. На 50–175 nWidart предсказуемее, а свыше 175 спасает только internachi с modules:cache, иначе линейный скан сильно замедлит работу. 🔗 Репа с данными

🔥 База по экономике токенов и кэшированию от AI Platform Lead из Bitrix24 Знакомьтесь, Сергей Нотевский. AI Platform Lead в
🔥 База по экономике токенов и кэшированию от AI Platform Lead из Bitrix24 Знакомьтесь, Сергей Нотевский. AI Platform Lead в Bitrix24. Он один из ключевых экспертов нашего курса AgentOps. На своих лекциях он детально разбирает экономику AI-агентов, кэширование токенов, LLM-инфраструктуру и вывод генеративных систем в стабильный прод. Мы попросили Сергея поделиться материалами для тех, кто хочет оптимизировать косты на LLM в проде. Сохраняйте методичку по prefix cache метрике, которая напрямую влияет на ваши деньги. Как говорят создатели Manus:
“KV-cache hit rate is the single most important metric for a production-stage AI agent.”
🛠 Что внутри методички (комбо из 3 статей + код):
Экономика кэширования — особенности провайдеров и как правильно считать затраты. Частые анти-паттерны — почему ваш кэш постоянно сбрасывается и вы платите больше. Кэш в AI-агентах — специфика работы с памятью в автономных системах.
🍒 Вишенка на торте: готовый SKILL для агента, который делает ревью вашего проекта, находит анти-паттерны и предотвращает низкое попадание в кэш. — Забрать комбо-материалы на GitHub P.S. Если хотите послушать Сергея вживую — ловите его на конференциях Kode Waves (май), Conversations AI и Highload Spb (июнь). 🎁 Акция в честь старта продаж! Прямо сейчас при покупке Инженерного трека вы получаете полный доступ к материалам курса «Разработка ИИ-агентов» в подарок. 👉 Забрать 2 курса по цене 1 и начать обучение

🚀 Laravel 13.6.0: дебаунс для очередей из коробки Частое сохранение документа плодит в очереди дублирующиеся задачи переиндексации. Раньше спасал интерфейс ShouldBeUnique, который блокирует диспатчи на входе. Теперь добавлен полноценный debounce — выполняется только последняя задача. Достаточно повесить атрибут на класс, и все дубли в заданном временном окне схлопываются на этапе выполнения:
#[DebounceFor(30, maxWait: 120)]
class RebuildSearchIndex implements ShouldQueue
{
    public function __construct(public int $documentId) {}

    public function debounceId(): string
    {
        return (string) $this->documentId;
    }

    public function handle(): void
    {
        SearchIndex::rebuild($this->documentId);
    }
}
Запустить дебаунс можно и без правки класса: dispatch(new SyncData($id))->debounceFor(30). Другие обновления релиза:роут /up отдает JSON по заголовку Accept (полезно для балансировщиков); — добавлен JsonFormatter для структурных логов; — появился транспорт Cloudflare Email. 🔗 Читать подробнее Библиотека пхпшника #release_radar

🔥 Еще с Laravel 8 появился Prunable С его помощью вы можете удалять старые модели по расписанию. Вам больше не нужно писать
🔥 Еще с Laravel 8 появился Prunable С его помощью вы можете удалять старые модели по расписанию. Вам больше не нужно писать пользовательские команды. Библиотека пхпшника #vardump

😎 Знакомьтесь с экспертом Proglib.academy: AI-архитектор Андрей Носов Андрей — один из ключевых спикеров нашего курса AgentO
😎 Знакомьтесь с экспертом Proglib.academy: AI-архитектор Андрей Носов Андрей — один из ключевых спикеров нашего курса AgentOps. Он выстраивает архитектуру, которая выживает в суровом проде и активно делится своим опытом. За что его ценит IT-комьюнити: 🟣 Топ-спикер AI Conf 2026
Его доклад про мифы семантического поиска и провалы Naive RAG стал одним из самых рейтинговых на конференции.
🟣 Эксперт по GraphRAG и Knowledge Graphs
Андрей внедряет инженерный подход в сложные системы, заменяя «слепую веру» в эмбеддинги строгой логикой графов.
🟣 Автор «14 кругов ада для RAG»
Разработал уникальный набор из 14 unit-тестов, на которых ломается стандартный векторный поиск (от слепоты к отрицаниям до конфликта версий).
🟣 Спикер Saint HighLoad
Регулярно выступает на крупнейших хайлоад-площадках, разбирая архитектуру отказоустойчивых ИИ-сервисов.
Андрей упаковал свои наработки в Google Colab, где можно пощупать 14 сценариев ошибок RAG и их решения: 🔗 Забрать Colab-ноутбук На курсе Андрей отвечает за самые «мясные» блоки: RAG, оркестрацию агентов и их промышленную эксплуатацию. Узнать больше о программе и обучении у Андрея: 👉 Курс о том, как внедрять AI-логику в бэкенд и сохранять стабильность сервиса Так, продолжаем знакомить вас с командой? 👍 — Да, ждем новых лиц 🔥 — Пойду тестить Colab Носова

🔧 Работаем с kubectl Под завис в Pending, а вы не знаете почему. Нет ресурсов, не тот nodeSelector или PVC не биндится? kubectl describe pod покажет секцию Events — там Kubernetes прямым текстом пишет причину. 🔹 Зачем это нужно — Events содержат сообщения от scheduler, kubelet и controller manager. — Показывает FailedScheduling с причиной: Insufficient cpu, node affinity mismatch, и т.д. — Видны ошибки pull-а образов, mount томов, readiness/liveness probe failures. 🔹 Как использовать — Полное описание пода: kubectl describe pod my-pod — Смотреть только Events (хак): kubectl describe pod my-pod | grep -A 20 "Events:" — События всего неймспейса: kubectl get events --sort-by='.lastTimestamp' — Только warning-и: kubectl get events --field-selector type=Warning — Следить за новыми: kubectl get events -w 💡 Про-тип: Events живут только 1 час по умолчанию. Если под висит в Pending давно и Events пустые, посмотрите kubectl get events -A --sort-by='.lastTimestamp', возможно, событие уже из другого неймспейса.

✔️ PHP-тест: клон, который мутирует оригинал Пользователь нажал «Повторить заказ». Цены в его старом заказе изменились. 📦 Задание Фича: кнопка «Повторить заказ» в личном кабинете. Копирует предыдущий заказ, применяет промокод, создаёт новый черновик. Оригинал помечается флагом repeated для аналитики. Через неделю — тикет от бухгалтерии: суммы в старых заказах не сходятся с тем, что было при оплате. Проблема только у заказов, которые хотя бы раз «повторяли». Суммы занижены ровно на размер скидки по промокоду.
// src/Order/Order.php
class Order
{
    public function __construct(
        private ?int   $id,
        private int    $userId,
        private array  $items, 
        private string $status,
        private bool   $repeated = false,
    ) {}

    public function getId(): ?int      { return $this->id; }
    public function getItems(): array  { return $this->items; }
    public function getStatus(): string { return $this->status; }

    public function resetForRepeat(): void
    {
        $this->id       = null;
        $this->status   = 'draft';
        $this->repeated = false;
    }

    public function markAsRepeated(): void
    {
        $this->repeated = true;
    }

    public function calculateTotal(): int
    {
        return array_sum(array_map(
            fn(OrderItem $i) => $i->getSubtotal(),
            $this->items
        ));
    }
}

// src/Order/OrderItem.php
class OrderItem
{
    public function __construct(
        private int $productId,
        private int $qty,
        private int $price,
    ) {}

    public function getProductId(): int { return $this->productId; }
    public function getQty(): int       { return $this->qty; }
    public function getPrice(): int     { return $this->price; }

    public function getSubtotal(): int
    {
        return $this->qty * $this->price;
    }

    public function applyDiscount(int $percent): void
    {
        $this->price = (int) round(
            $this->price * (1 - $percent / 100)
        );
    }
}

// src/Order/RepeatOrderHandler.php
class RepeatOrderHandler
{
    public function __construct(
        private OrderRepository $orders,
        private PromoService    $promo,
    ) {}

    public function handle(int $originalId, ?string $promoCode): Order
    {
        $original = $this->orders->findById($originalId);

        $copy = clone $original;
        $copy->resetForRepeat();

        if ($promoCode !== null) {
            $discount = $this->promo->resolve($promoCode);

            foreach ($copy->getItems() as $item) {
                $item->applyDiscount($discount->percent);
            }
        }

        $this->orders->save($copy);

        $original->markAsRepeated();
        $this->orders->save($original);

        return $copy;
    }
}

// src/Repository/OrderRepository.php
class OrderRepository
{
    public function __construct(private PDO $pdo) {}

    public function save(Order $order): void
    {
        if ($order->getId() === null) {
            $this->insert($order);
        } else {
            $this->update($order);
        }
    }

    private function update(Order $order): void
    {
        $this->pdo->prepare(
            'UPDATE orders SET status = ?, repeated = ? WHERE id = ?'
        )->execute([$order->getStatus(), (int) $order->isRepeated(), $order->getId()]);

        $this->pdo->prepare('DELETE FROM order_items WHERE order_id = ?')
            ->execute([$order->getId()]);

        foreach ($order->getItems() as $item) {
            $this->pdo->prepare(
                'INSERT INTO order_items (order_id, product_id, qty, price) VALUES (?, ?, ?, ?)'
            )->execute([$order->getId(), $item->getProductId(), $item->getQty(), $item->getPrice()]);
        }
    }
}
🔹 Задачи — Объяснить, каким образом цены в оригинальном заказе оказались изменены в базе — Исправить код так, чтобы оригинал гарантированно не мутировал Ставьте → 🔥 если нравится формат. Если нет → 🌚 💬 Решения пишите в комменты под спойлер — сравним подходы.

💡 Затрагиваемые отношения Eloquent Laravel автоматически обновляет updated_at в ManyToMany отношениях, а также поставляется
💡 Затрагиваемые отношения Eloquent Laravel автоматически обновляет updated_at в ManyToMany отношениях, а также поставляется с методом setTouchedRelations для ручного обновления связанных моделей в отношениях OneToOne и OneToMany. 🐸 Библиотека пхпшника #vardump

Письмо ушло, но воркер упал до того как пометил job выполненной. Job запустилась повторно, что получит пользователь?
Anonymous voting

🧑‍💻 Приглашаем на открытый урок курса «PHP-разработчик. Продвинутый уровень» 19 мая в 20:00 — Работа с очередями в Laravel:
🧑‍💻 Приглашаем на открытый урок курса «PHP-разработчик. Продвинутый уровень» 19 мая в 20:00 — Работа с очередями в Laravel: от настройки до решения типичных проблем Разберём, как очереди помогают ускорить приложение и вынести тяжёлые задачи в фон без потери стабильности. Обсудим настройку и обработку задач, типичные ошибки, повторы при сбоях, защиту от дублирования и мониторинг выполнения. Вы поймёте, как работают фоновые процессы в Laravel, научитесь правильно настраивать очереди и делать приложение быстрее и надёжнее. 🚀Открытый урок проходит в преддверии старта курса «PHP-разработчик. Продвинутый уровень» 19 мая в 20:00 МСК. Регистрация: https://clc.to/v1jqRw Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

🔽 Ловим тормозные запросы до того, как это сделает прод Метод whenQueryingForLongerThan позволяет задать порог в миллисекундах и среагировать моментально: кинуть алерт в Slack, залогировать или просто позвать автора запроса на кофе.
// AppServiceProvider::boot()

DB::whenQueryingForLongerThan(500, function (Connection $connection, QueryExecuted $event) {
    Log::warning('Slow query detected', [
        'sql'  => $event->sql,
        'time' => $event->time,
    ]);

    // Notification::send(...);
});
⏱️ Порог считается для суммарного времени всех запросов на соединении, а не для одиночного (для точечного мониторинга есть DB::listen()).

📌 backup PostgreSQL с минимальной нагрузкой на прод Разберём эффективный способ бэкапа PostgreSQL с помощью pg_basebackup + реплики. Сценарий: есть продовый PostgreSQL и настроенная горячая реплика (streaming replication). Зачем использовать реплику для бэкапа? ▪️ Причины — На проде бэкап может замедлить отклик приложения. — Реплика отличный способ разгрузить основной сервер. — Бэкап с pg_basebackup возможен только на стопнутой БД или через репликацию. ▪️ Как сделать
pg_basebackup -h replica.host -U repl_user -D /backup/pg -F tar -z -P
▪️ Флаги -h — адрес реплики -U — пользователь с правами репликации -D — куда класть бэкап -F tar -z — формат архива и сжатие -P — прогресс в консоли А ещё можно добавить в cron и получить стабильный ночной бэкап.

🔥 Знакомьтесь с экспертом Proglib.academy: Эмиль Сатаев Эмиль — эксперт с 8-летним опытом в разработке, который специализиру
🔥 Знакомьтесь с экспертом Proglib.academy: Эмиль Сатаев Эмиль — эксперт с 8-летним опытом в разработке, который специализируется на внедрении LLM и агентных подходов в реальные коммерческие сервисы. Он точно знает, как проектировать архитектуру так, чтобы ИИ-функции работали стабильно в связке с внешними системами. 🏃‍♀️ Уже 14 мая Эмиль проведет открытый вебинар! Обсудим самую «больную» тему: «Почему AI-продукты на базе LLM ломаются и как сделать, чтобы работало». 🗓 Когда: 14 мая в 19:00 (Мск) Почему Эмиля стоит послушать: 🟣 8+ лет в разработке (Backend и Frontend)
Прошел путь от фулстека до Backend Platform Developer в SMIT.Studio.
🟣 Международный исследовательский опыт
Работал исследователем в Институте ИИ НИУ ВШЭ и в Национальном университете Сингапура (NUS).
🟣 Преподаватель-практик
Ведет семинары в НИУ ВШЭ, в том числе по проектированию и разработке агентских систем.
🟣 Мастер интеграции AI в Backend
Его главная суперсила — умение правильно встраивать LLM через API, выстраивать workflow и агентную логику в сложных распределенных системах.
🔗 Зарегистрироваться на вебинар

🧠 LLPhant: LangChain для PHP-разработчиков Если нужно прикрутить LLM к проекту, а городить мост на Python в виде отдельного сервиса не хочется — LLPhant закрывает эту задачу одной либой. Это единый интерфейс к OpenAI, Anthropic, Mistral, LM Studio и локальным моделям через Ollama.
// Сегодня OpenAI
$chat = new OpenAIChat();
$response = $chat->generateText('Столица Франции?');

// Завтра — локальная модель
$config = new OllamaConfig();
$config->model = 'llama2';
$chat = new OllamaChat($config);
Что внутри: — полноценный RAG-пайплайн: чтение PDF/Word, чанкинг, эмбеддинги, поиск; — векторные хранилища на любой вкус — pgvector, Redis, Elastic, Qdrant, Milvus, Pinecone; — стриминг ответов, подсчет токенов, vision для картинок; — function calling — описываешь тулзы PHP-классами, модель сама решит когда дернуть. Для смены провайдера нужно переписать две строки в конфиге (а не половину сервиса). 🔗 Подробнее Библиотека пхпшника

⚡️ Магия curl Сервис отвечает 500-кой, а вы не понимаете — проблема в сети, DNS, SSL или бэкенд лёг? Прежде чем лезть в логи и разворачивать Wireshark, попробуйте curl -w и получите полный таймлайн запроса за секунду. 🔹 Зачем это нужно — Разбивает запрос на фазы: DNS, TCP-коннект, TLS-хендшейк, ожидание первого байта, передача данных. — Моментально показывает, где именно bottleneck — на уровне сети или приложения. — Работает везде: на проде, в контейнере, на CI-раннере. 🔹 Как использовать — Полный таймлайн запроса:
curl -o /dev/null -s -w "\n  DNS: %{time_namelookup}s\n  TCP: %{time_connect}s\n  TLS: %{time_appconnect}s\n  TTFB: %{time_starttransfer}s\n  Total: %{time_total}s\n" https://your-api.com/health
— Если time_namelookup высокий, проблема в DNS, смотрите резолвер. — Если между time_connect и time_appconnect большой разрыв, тормозит TLS, проверяйте сертификаты. — Если time_starttransfer зашкаливает при нормальном коннекте, бэкенд думает слишком долго. — Удобно завернуть в алиас и дёргать по крону для бедняцкого мониторинга latency. 💡 Про-тип: сохраните шаблон в файл и вызывайте через curl -w имя_файла. Не придётся каждый раз гуглить формат переменных.