Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.2K subscribers
1.39K photos
23 videos
26 files
4.08K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
How to: Использование SQLite в продакшене с Laravel

SQLite — это отличная база данных для многих Laravel-приложений, особенно если ваша система не требует огромных масштабов. Она позволяет эффективно работать даже с большим количеством одновременных запросов, при этом не требуя сложной настройки сервера, как в случае с MySQL. Главным преимуществом SQLite является его простота: это один файл базы данных, который можно легко копировать, делая резервное копирование и миграцию простыми. В отличие от MySQL, который требует работы с демоном сервера и дополнительной настройки, SQLite использует ту же среду, в которой работает ваше приложение, минимизируя накладные расходы на межпроцессное взаимодействие.

Преимущества использования SQLite:

Легкость в настройке: Для работы SQLite достаточно лишь одного файла, что упрощает резервное копирование и перенос данных.

Минимизация накладных расходов: SQLite работает непосредственно в том же процессе, что и ваше приложение, исключая лишние расходы на сеть и межпроцессное взаимодействие.

Простота использования: Для большинства небольших и внутренних приложений SQLite может быть быстрее и проще, чем более сложные решения, такие как MySQL.

Этот подход подходит для приложений, которые не требуют огромной масштабируемости и могут работать на одном сервере.

В статье рассмотрены основные практические советы для использования SQLite с Laravel, включая улучшение производительности с помощью режима WAL и особенности работы с транзакциями.

👉 Читать статью

Библиотека пхпшника
Единый код валидаторов на фронте и бэке (PHP + FFI + Go + JS)

Когда фронт и бэк на разных языках (например, JS + PHP), часто приходится писать одинаковые валидаторы дважды. Это не только лишняя работа, но и риск ошибок, когда логика валидации на фронте и бэке не совпадает.

🎯 Решение: Используем FFI (Foreign Function Interface) для запуска JavaScript-кода на PHP с помощью Go. Это позволяет использовать один и тот же валидатор и на фронте, и на бэке, обеспечивая синхронизацию логики.

Преимущества: Один код для валидации на двух уровнях, меньше ошибок и проще поддержка.

🚨 Недостатки: Может быть немного медленно из-за FFI и проблемы с поддержкой юникодных символов в Go.

🔧 Хабр

Библиотека пхпшника
😁212😢1🌚1
composer/pcre — Библиотека-обертка для стандартных функций

Это обёртка над стандартными функциями PHP preg_*, которая:

Делает вызовы функций регулярных выражений безопаснее и удобнее.
Генерирует исключения при ошибках (вместо того, чтобы просто возвращать false и молчать).
Возвращает более предсказуемые результаты (например, всегда массив строк, а не false|null).
Упрощает написание кода и улучшает читаемость — не нужно постоянно проверять preg_last_error() или === false.

Для чего нужна
📦 В первую очередь библиотека используется внутри Composer, чтобы избежать неожиданных багов при работе с регулярками.
👨‍💻 Её можно использовать и в своих проектах, если хотите работать с регулярными выражениями в более строгом и типобезопасном стиле.

🔗 Github

Библиотека пхпшника

#инструменты
4👍2🔥1🌚1
Берём под контроль TODO-шки в коде php

Проблема со сложностью управления TODO/FIXME комментариями в коде очень стара. Ей больше 50 лет. Дошло до того, что в некоторых проектах начали запрещать их со словами: «или исправь сразу или не создавай мусор». Вот о том как можно автоматизировать управление ими и превратить из мусора в полезный инструмент и пойдет речь.

🔗 Хабр
Forwarded from Библиотека программиста | программирование, кодинг, разработка
This media is not supported in your browser
VIEW IN TELEGRAM
🎮 Добавь интерактива в свой contribution graph

GitHub Breakout — GitHub Action, который превращает твои коммиты в SVG в стиле Breakout, ежедневно обновляется и переключается между светлым/тёмным режимом 🤯

Это мы используем

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰3
⭐️ Что спрашивать на собесе у HR

На собеседовании обычно всё внимание сосредоточено на вас: опыт, проекты, навыки. Но важно помнить — интервью это обоюдный процесс. Вы тоже выбираете компанию. И тут возникает вопрос: а что спрашивать в ответ?

Вопросы к HR:

• Как устроен процесс адаптации новых сотрудников?
• Какие возможности для роста есть у специалистов на моей позиции?
• Как компания относится к переработкам и work-life balance?
• Есть ли внутреннее обучение или компенсация внешних курсов?

Вопросы к будущей команде:

• Как проходит рабочий день: митинги, планирования, коммуникация?
• Как распределяются задачи и кто принимает решения по приоритетам?
• Как команда решает конфликты или технические споры?
• Чем гордятся в проекте, а что считают слабым местом?

👉 Какие вопросы вы задаёте на собеседованиях?

🐸Библиотека пхпшника

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🎯 Команда дня: Сжатие и минификация CSS/JS через Node или PHP

📌 Команда (Node.js + Terser для JS):

npx terser src/app.js -o dist/app.min.js -c -m

💡 Команда минифицирует ваш JavaScript, сокращает код и уменьшает размер файлов, используя Terser.

📌 Команда (Node.js + CleanCSS для CSS):

npx clean-css-cli -o dist/style.min.css src/style.css

💡 Минифицирует CSS, удаляя пробелы, комментарии и упрощая записи, что ускоряет загрузку страницы.

🔍 Зачем это нужно?
🔹 Ускорение загрузки страниц: Меньший размер JS и CSS сокращает время передачи данных.
🔹 Оптимизация производительности: Минифицированный код обрабатывается браузером быстрее.
🔹 Чистый продакшн: Убираются ненужные пробелы и комментарии, что делает код компактным.

⚙️ Дополнительные опции Terser:
-c или --compress: Сжимает код, удаляя лишние конструкции.
-m или --mangle: Переименовывает переменные и функции, уменьшая размер.
--source-map: Генерирует source map для удобного дебага минифицированного кода.
Пример с source map:

npx terser src/app.js -o dist/app.min.js -c -m --source-map

⚙️ Дополнительные опции CleanCSS:
--compatibility — задаёт совместимость с браузерами.
--level — уровень оптимизации (1 или 2).

Пример:

npx clean-css-cli -o dist/style.min.css src/style.css --level 2

💡 Советы:
Для больших проектов удобно автоматизировать минификацию через npm scripts или Gulp/Webpack.

Минифицируйте только для production, чтобы не усложнять отладку на development.

Используйте source maps для удобного дебага минифицированного кода.
1👍1
🔥 Последняя неделя перед стартом курса по AI-агентам

Старт курса уже 15го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место

На курсе:
разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах

📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями

И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»

Промокод на 5.000₽: LASTCALL

👉 Курс здесь
🚀 PHP Enums: когда стоит, а когда нет

Enums в PHP — это не просто «ещё один класс», а особый тип данных, который позволяет жёстко зафиксировать набор возможных значений. Это повышает надёжность кода и избавляет от лишних проверок вроде in_array() или громоздких switch-конструкций.

Но не спешите вставлять их повсюду:
Если набор значений часто меняется или расширяется пользователями/третьими системами.
Если список тривиален и не планируется расти.
При рефакторинге легаси — Enums не для того, чтобы заменить всё подряд.

🔑 Где Enum действительно уместен
Фиксированные списки (статусы поста, роли пользователей, сетевые состояния).
Там, где нужна строгая типизация и меньше защитного кода.
В DDD — как часть доменной модели (например, value objects).

Бонусы:
Меньше ручных проверок и исключений.
Код становится чище, предсказуемее.
Удобнее работать с типами при сериализации, хранении в БД и локализации.

💡 Практика:
Для хранения в базе → используйте backed enum (enum UserRole: string).
Для сложной логики или локализации → лучше чистый enum с методами (label()).
Договоритесь в команде о единых правилах (например, всегда использовать метод label()).

🔗 Читать статью

Библиотека пхпшника
🔥2
NumPower — сложные вычисления на PHP

Расширение PHP для эффективных научных вычислений и работы с массивами данных с поддержкой GPU.

Посмотрите эту простую нейронную сеть, созданную на PHP с нуля с помощью NumPower.

🔗 Github

Библиотека пхпшника

#инструменты
8😁2
Какой из следующих методов используется для отправки электронной почты в Laravel?
Anonymous Quiz
27%
sendMail()
30%
send()
15%
dispatchMail()
28%
mail()
🌚41
🚦 composer/semver — библиотека для работы с версиями

Эта библиотека стоит за самим Composer и отвечает за то, чтобы корректно сравнивать версии пакетов и интерпретировать условия вроде ^7.4 || ^8.0.

Что умеет:
📌 Проверять, подходит ли версия под ограничение
🔢 Сортировать список версий по семантическим правилам
🛠️ Разбирать сложные условия (>=, <=, ||, -dev, beta) так же, как это делает Composer.

Зачем это вам?
⚙️ Можно встроить в свои скрипты проверки зависимостей.
🧪 Удобно для CI/CD — проверять версии PHP или расширений.
🚀 Используется самим Composer, так что поведение будет на 100% совпадать.

🔗 Github

Библиотека пхпшника

#инструменты
1
📚 Генераторы и их мифы: как экономия памяти на самом деле работает

Недавняя статья о «ленивых вычислениях в PHP» поднимала популярную тему: генераторы экономят память. Однако, как это часто бывает, под видом оптимизации скрывается простая подмена понятий.

🔍 Про генераторы
Генераторы — полезный инструмент в программировании, который активно используется, например, в Symfony. Они помогают решать задачи от управления ходом выполнения программы до добавления элементов в массив «на лету». Однако утверждение, что генераторы экономят память, — это миф. Реальная экономия памяти происходит благодаря принципу «чтение данных по одной записи», а генератор всего лишь маскирует обычный цикл и упрощает код.

🛠️ Как это работает на практике
Генератор помогает писать более чистый и понятный код, но сам по себе он не освобождает память. Это работает только в случае, когда код уже использует массивы — генератор позволяет их заменить, не теряя в производительности. Но не нужно воспринимать это как «магическую» экономию памяти. В действительности, экономия происходит за счет потоковой обработки данных.

📝 Про статью
Статья предлагает пример «реального кейса из продакшена», который на самом деле лишь подтверждает подмену понятий. Автор рассказывает, как генераторы могут сократить использование памяти, но на деле это не так. Интересно, что после критики статьи автор изменил нарратив и признал, что экономия памяти достигается через стриминг данных.

⚙️ Про генеративный ИИ
Это также напоминает ситуацию с генеративным ИИ: если им пользуется профессионал, он становится мощным инструментом для ускорения рутинных процессов. Но если подходить без должного понимания и контекста, ИИ может превратить программиста в просто оператора, который слепо повторяет ответы, не проверяя их на ошибки. И в таком случае результат — не решение задачи, а её иллюзия.

👉 Хабр

Библиотека пхпшника
5👏1
🐞 Тренировка по дебагу

Если ваши коллеги пишут идеальный код, пора развивать навыки поиска ошибок.

Чтобы стать мастером отладки, важно не только понимать, как писать правильный код, но и уметь находить и исправлять ошибки, которые могут скрываться даже в самых «идеальных» решениях.

Для этого можно использовать промпт:
Ты — эксперт по созданию ошибок в коде на PHP, умеющий писать код, который выглядит функциональным, но содержит тонкие и значимые ошибки. Твоя цель — создавать фрагменты кода на PHP, содержащие конкретные типы ошибок, позволяя пользователям тренировать свои навыки отладки и проверки кода. Код должен быть синтаксически правильным, но семантически ошибочным.

Напиши функцию на PHP, которая <ДЕЛАЕТ ЧТО-ТО>. Включи как минимум три различных ошибки, которые разработчик может часто допускать при реализации этой функции. Ошибки должны приводить к некорректным результатам или потенциальным ошибкам времени выполнения.


С каждым багом вы становитесь только сильнее.

Библиотека пхпшника
😁2
🚀 How to: Реализация JWT аутентификации с использованием Symfony

Этот гайд поможет настроить JWT аутентификацию в Symfony для аутентификации пользователей с использованием refresh token. Подход ориентирован на использование Symfony для аутентификации пользователей в сторонних системах.

1️⃣ Установка и настройка Jose JWT Bundle

Для работы с JWT необходимо установить библиотеку web-token/jwt-bundle. Эта библиотека позволяет генерировать и проверять JWT с помощью криптографических ключей.

2️⃣ Генерация ключей

Создаются ключи для подписи JWT и настройки их в Symfony. Важно хранить эти ключи в безопасном месте и не коммитить их в систему контроля версий.

3️⃣ Конфигурация

В файле конфигурации Symfony указываются пути к сгенерированным ключам и настраиваются параметры для их использования в процессе подписи и верификации JWT.

4️⃣ Создание Refresh Token

Для реализации механизма обновления JWT необходимо создать сущность refresh token, который будет храниться в базе данных. Эти токены позволят пользователю получать новые JWT при истечении срока действия старых.

5️⃣ Генерация и обмен JWT

Создается сервис, который генерирует JWT для пользователя и обменивает refresh token на новый JWT при его истечении.

6️⃣ Создание конечных точек (Endpoints)

Настроить маршруты для:

1. Объявления публичного ключа.

2. Запроса начального JWT и refresh token.

3. Обмена refresh token на новый JWT.

7️⃣ Ротация ключей и безопасность

Рекомендуется регулярно менять ключи и настроить удаление просроченных refresh token с помощью cron-задач. Важно обеспечить высокую безопасность системы и провести тщательное тестирование.

👉 Читать полную статью

Библиотека пхпшника
3