🛠️ How to: безопасно перейти с «уродливых» URL на чистые и человекочитаемые
Если ваш сайт всё ещё выдаёт адреса вида
🔎 «Уродливые» vs «чистые» URL
Ugly:
Clean:
Чистые URL лучше читаются, повышают CTR и дают поисковикам больше контекста — без магии, только структурное преимущество.
⚠️ Почему миграция опасна без подготовки
Неправильная замена структуры приводит к:
🔸 падению органического трафика
🔸 массовым 404
🔸 потере ссылочного веса
Это решается заранее настроенными 301-редиректами.
✔️ Пошаговый план
1) Аудит
Прокрасьте сайт Screaming Frog’ом, выгрузите все URL. Посмотрите server logs и определите приоритетные страницы.
2) Новая структура
Сформируйте правила для слегов: строчные буквы, дефисы, короткие словосочетания, единый паттерн.
3) Карта соответствия
Создайте таблицу:
4) Настройка 301 редиректов
Предпочитайте серверный уровень (Apache/Nginx).
Пример принципа:
Лучшие практики:
— один редирект вместо цепочек
— единое место хранения правил
— учитывать/очищать query-параметры последовательно
5) Обновление внутренних ссылок
Правьте меню, breadcrumbs, canonical-теги, sitemap.
Заново отправьте sitemap в Search Console.
6) Тестирование
Проверьте на стейдже:
— корректность всех 301
— отсутствие блокировок в robots.txt
— отсутствие утечек старых URL в шаблонах
7) Мониторинг
Первые две недели: ежедневно смотреть GSC, 404, трафик, падения по ключам. Быстро устранять ошибки.
⚙️ Советы разработчикам
Используйте regex-паттерны для массовых правил, но фиксируйте итоговую карту вручную.
Тестируйте редиректы через
Делайте релиз в низкую нагрузку и держите rollback-план.
🔧 Полезные инструменты
Screaming Frog
Google Search Console
Ahrefs/Semrush (бэки)
Серверные логи
📋 Чек-лист после миграции
Все старые URL возвращают 301 → новый канонический URL
Нет цепочек и дублей
Sitemap пересобран и отправлен
Canonical обновлены
404 исправляются оперативно
📚 Подробный разбор и практический кейс
Библиотека пхпшника
📍 Навигация: Вакансии • Задачи • Вопросы с собеса
Если ваш сайт всё ещё выдаёт адреса вида
/product.php?id=12345, вы теряете в удобстве, аналитике и небольшом SEO-профите. Переход на чистые URL — /products/red-running-shoes — даёт выигрыш, но только при корректной миграции, иначе риски высоки.🔎 «Уродливые» vs «чистые» URL
Ugly:
/article.php?id=9876Clean:
/blog/url-migration-best-practicesЧистые URL лучше читаются, повышают CTR и дают поисковикам больше контекста — без магии, только структурное преимущество.
⚠️ Почему миграция опасна без подготовки
Неправильная замена структуры приводит к:
🔸 падению органического трафика
🔸 массовым 404
🔸 потере ссылочного веса
Это решается заранее настроенными 301-редиректами.
✔️ Пошаговый план
1) Аудит
Прокрасьте сайт Screaming Frog’ом, выгрузите все URL. Посмотрите server logs и определите приоритетные страницы.
2) Новая структура
Сформируйте правила для слегов: строчные буквы, дефисы, короткие словосочетания, единый паттерн.
3) Карта соответствия
Создайте таблицу:
old_url → new_url → status → priority → notes → backlinks.4) Настройка 301 редиректов
Предпочитайте серверный уровень (Apache/Nginx).
Пример принципа:
Redirect 301 /product.php?id=987 /products/mens-black-leather-shoesЛучшие практики:
— один редирект вместо цепочек
— единое место хранения правил
— учитывать/очищать query-параметры последовательно
5) Обновление внутренних ссылок
Правьте меню, breadcrumbs, canonical-теги, sitemap.
Заново отправьте sitemap в Search Console.
6) Тестирование
Проверьте на стейдже:
— корректность всех 301
— отсутствие блокировок в robots.txt
— отсутствие утечек старых URL в шаблонах
7) Мониторинг
Первые две недели: ежедневно смотреть GSC, 404, трафик, падения по ключам. Быстро устранять ошибки.
⚙️ Советы разработчикам
Используйте regex-паттерны для массовых правил, но фиксируйте итоговую карту вручную.
Тестируйте редиректы через
curl и автоматические краулеры.Делайте релиз в низкую нагрузку и держите rollback-план.
🔧 Полезные инструменты
Screaming Frog
Google Search Console
Ahrefs/Semrush (бэки)
Серверные логи
📋 Чек-лист после миграции
Все старые URL возвращают 301 → новый канонический URL
Нет цепочек и дублей
Sitemap пересобран и отправлен
Canonical обновлены
404 исправляются оперативно
📚 Подробный разбор и практический кейс
Библиотека пхпшника
📍 Навигация: Вакансии • Задачи • Вопросы с собеса
👍1
«Я хотел бы знать это раньше. Очереди в Symfony»
Простая очередь не вызывает проблем. Но когда их становится десятки, а через них проходят критичные бизнес-процессы, начинаются вопросы:
как называть очереди, чтобы не запутаться?
как избежать потерь сообщений?
как организовать мониторинг, чтобы видеть, что происходит внутри?
Материал разбирает ключевые ошибки, которые всплывают при проектировании системы очередей, и решения, которые помогают поддерживать инфраструктуру в рабочем состоянии.
❗ Ошибка №1. Хаотичный нейминг ресурсов
Когда сервисов много, а правил нет, RabbitMQ превращается в набор непонятных очередей и exchange'ей. Чтобы избежать «зоопарка», используется единый шаблон именования:
Он позволяет понять:
• кто публикует сообщение;
• что делает событие или команда;
• кто является потребителем;
• какой тип ресурса перед нами;
• является ли очередь failed-контуром.
❗ Ошибка №2. Сырые JSON вместо явных DTO
Если сообщение передаётся как обычная JSON-строка, изменения формата неизбежно ломают часть потребителей.
Решение:
• для каждой очереди заводится отдельный DTO;
• Messenger принудительно десериализует входящее сообщение в этот класс, даже если внешний продюсер не передаёт заголовок type.
Такой подход устраняет скрытые изменения контракта и гарантирует корректное преобразование на всех языках и сервисах.
❗ Ошибка №3. Отсутствие полноценного failed-контра
Если обработчик падает, сообщение легко потерять, особенно при кастомных конфигурациях. Надёжная схема:
• у каждого транспорта — своя failed-очередь;
• у каждой failed-очереди — собственный exchange;
• включён TTL (например, 7 дней), чтобы очередь не разрасталась до бесконечности.
Это обеспечивает прозрачность ошибок и упрощает повторную обработку.
❗ Ошибка №4. «Очереди работают → значит всё в порядке»
Даже если обработчики крутятся, без мониторинга можно не заметить, что сообщения лежат часами.
Минимальный набор наблюдаемости:
• размер очередей и их рост;
• количество ошибок и сообщений в failed-контуре;
• время обработки (P95 / P99);
• отдельные логи по каждому типу сообщений;
• простые алерты: рост очереди, всплеск ошибок, деградация скорости.
📌 Что это даёт командам
• прозрачный нейминг и понятная структура RabbitMQ;
• безопасные и стабильные контракты сообщений;
• предотвращение тихих потерь данных;
• наблюдаемость и предсказуемое поведение очередей;
• возможность быстро находить и устранять проблемы.
🔗 Хабр
Библиотека пхпшника
Простая очередь не вызывает проблем. Но когда их становится десятки, а через них проходят критичные бизнес-процессы, начинаются вопросы:
как называть очереди, чтобы не запутаться?
как избежать потерь сообщений?
как организовать мониторинг, чтобы видеть, что происходит внутри?
Материал разбирает ключевые ошибки, которые всплывают при проектировании системы очередей, и решения, которые помогают поддерживать инфраструктуру в рабочем состоянии.
❗ Ошибка №1. Хаотичный нейминг ресурсов
Когда сервисов много, а правил нет, RabbitMQ превращается в набор непонятных очередей и exchange'ей. Чтобы избежать «зоопарка», используется единый шаблон именования:
{service}.{eventOrCommand}[.{consumer}].{queue|exchange|routingKey}[.{failed}]Он позволяет понять:
• кто публикует сообщение;
• что делает событие или команда;
• кто является потребителем;
• какой тип ресурса перед нами;
• является ли очередь failed-контуром.
❗ Ошибка №2. Сырые JSON вместо явных DTO
Если сообщение передаётся как обычная JSON-строка, изменения формата неизбежно ломают часть потребителей.
Решение:
• для каждой очереди заводится отдельный DTO;
• Messenger принудительно десериализует входящее сообщение в этот класс, даже если внешний продюсер не передаёт заголовок type.
Такой подход устраняет скрытые изменения контракта и гарантирует корректное преобразование на всех языках и сервисах.
❗ Ошибка №3. Отсутствие полноценного failed-контра
Если обработчик падает, сообщение легко потерять, особенно при кастомных конфигурациях. Надёжная схема:
• у каждого транспорта — своя failed-очередь;
• у каждой failed-очереди — собственный exchange;
• включён TTL (например, 7 дней), чтобы очередь не разрасталась до бесконечности.
Это обеспечивает прозрачность ошибок и упрощает повторную обработку.
❗ Ошибка №4. «Очереди работают → значит всё в порядке»
Даже если обработчики крутятся, без мониторинга можно не заметить, что сообщения лежат часами.
Минимальный набор наблюдаемости:
• размер очередей и их рост;
• количество ошибок и сообщений в failed-контуре;
• время обработки (P95 / P99);
• отдельные логи по каждому типу сообщений;
• простые алерты: рост очереди, всплеск ошибок, деградация скорости.
📌 Что это даёт командам
• прозрачный нейминг и понятная структура RabbitMQ;
• безопасные и стабильные контракты сообщений;
• предотвращение тихих потерь данных;
• наблюдаемость и предсказуемое поведение очередей;
• возможность быстро находить и устранять проблемы.
🔗 Хабр
Библиотека пхпшника
👍1
🧠 Лайфхак: кеширование результатов и конфигурации в Laravel
🚀 Почему кешировать — и что именно
🔹 Кеш конфигурации и маршрутов
Laravel может сохранять все конфигурационные файлы и маршруты в виде готовых к быстрому использованию кеш-файлов. Это снижает количество файлов, которые фреймворк должен парсить при каждом запросе.
🔹 Кеш результатов запросов, API вызовов и часто запрашиваемых данных
Вместо повторного выполнения тяжёлых SQL-запросов или обращений к удалённым сервисам — результаты можно хранить в кеше и возвращать мгновенно
🧰 Как включить кеш конфигурации и маршрутов
Выполните в терминале проекта:
Если были изменения — сначала очистите, потом заново закешируйте:
📌 Эти команды значительно ускоряют старт приложения и минимизируют парсинг файлов при каждом запросе.
🧠 Кеширование результатов запросов (данных)
Laravel позволяет хранить результаты тяжёлых запросов или вычислений:
📍 Такой код означает:
💾 Laravel проверяет наличие
🔁 Если нет — выполняет запрос, сохраняет результат на 60 минут и возвращает его.
📈 Если есть — сразу отдаёт кеш без SQL-запроса
📦 Выбор драйвера кеша
Laravel поддерживает разные драйверы кеша, каждый с разным уровнем производительности:
⚡️ Redis / Memcached — лучшие для production-сред (in-memory).
📂 File / Database — подойдут для небольших проектов или dev-среды.
Настройка драйвера делается в
⚡️ Дополнительные кеш-стратегии
🔹 View cache — Blade шаблоны можно заранее скомпилировать (
🔹 Event cache — кеш событий Laravel (
🔹 Автоматизация кеша на проде — в CI/CD добавляйте
🧠 Когда использовать
✅ Production-среда: стабильные конфиги/маршруты и высокая нагрузка — кеш даст ощутимый прирост скорости.
⚠️ Разработка: кеш может мешать видеть изменения сразу, поэтому обычно отключают его в dev-окружении.
📌 Запросы к БД: кешируйте только те данные, которые действительно редко меняются — иначе результат устареет и придётся часто инвалидировать кеш.
🐸 Библиотека пхпшника
📍 Навигация: Вакансии • Задачи • Вопросы с собеса
🚀 Почему кешировать — и что именно
🔹 Кеш конфигурации и маршрутов
Laravel может сохранять все конфигурационные файлы и маршруты в виде готовых к быстрому использованию кеш-файлов. Это снижает количество файлов, которые фреймворк должен парсить при каждом запросе.
🔹 Кеш результатов запросов, API вызовов и часто запрашиваемых данных
Вместо повторного выполнения тяжёлых SQL-запросов или обращений к удалённым сервисам — результаты можно хранить в кеше и возвращать мгновенно
🧰 Как включить кеш конфигурации и маршрутов
Выполните в терминале проекта:
php artisan config:cache # кеширует всю конфигурацию
php artisan route:cache # кеширует все маршруты
Если были изменения — сначала очистите, потом заново закешируйте:
php artisan config:clear
php artisan route:clear
php artisan config:cache
php artisan route:cache
📌 Эти команды значительно ускоряют старт приложения и минимизируют парсинг файлов при каждом запросе.
🧠 Кеширование результатов запросов (данных)
Laravel позволяет хранить результаты тяжёлых запросов или вычислений:
use Illuminate\Support\Facades\Cache;
$posts = Cache::remember('index.posts', 60, function () {
return Post::with('comments', 'tags')->get();
});
📍 Такой код означает:
💾 Laravel проверяет наличие
index.posts в кеше;🔁 Если нет — выполняет запрос, сохраняет результат на 60 минут и возвращает его.
📈 Если есть — сразу отдаёт кеш без SQL-запроса
📦 Выбор драйвера кеша
Laravel поддерживает разные драйверы кеша, каждый с разным уровнем производительности:
⚡️ Redis / Memcached — лучшие для production-сред (in-memory).
📂 File / Database — подойдут для небольших проектов или dev-среды.
Настройка драйвера делается в
.env, например:CACHE_DRIVER=redis
⚡️ Дополнительные кеш-стратегии
🔹 View cache — Blade шаблоны можно заранее скомпилировать (
php artisan view:cache).🔹 Event cache — кеш событий Laravel (
php artisan event:cache).🔹 Автоматизация кеша на проде — в CI/CD добавляйте
config:cache и route:cache в деплой-скрипт🧠 Когда использовать
✅ Production-среда: стабильные конфиги/маршруты и высокая нагрузка — кеш даст ощутимый прирост скорости.
⚠️ Разработка: кеш может мешать видеть изменения сразу, поэтому обычно отключают его в dev-окружении.
📌 Запросы к БД: кешируйте только те данные, которые действительно редко меняются — иначе результат устареет и придётся часто инвалидировать кеш.
📍 Навигация: Вакансии • Задачи • Вопросы с собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
⌨️ Топ-вакансий по PHP за неделю
Веб-разработчик (PHP) в продукт из сферы FinTech — до 500 000 ₽, Удалёнка (Москва)
Backend Developer — до 4 000 $, Удаленка (Москва)
Middle+ PHP / Fullstack Developer — до 300 000₽, Офис (Москва)
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
Веб-разработчик (PHP) в продукт из сферы FinTech — до 500 000 ₽, Удалёнка (Москва)
Backend Developer — до 4 000 $, Удаленка (Москва)
Middle+ PHP / Fullstack Developer — до 300 000₽, Офис (Москва)
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
Собеседования это стресс. И не всегда в стрессе можно ответить на вопрос так, как было задумано. Некоторые вопросы настолько мозговыносящие, что невольно думаешь про интервьюера самые плохие мысли.
💬 Накидайте в комменты вопросов, которые ввели вас в ступор или просто заставили сгореть после собеса 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
🔸Вы можете использовать
Библиотека пхпшника
📍 Навигация: Вакансии • Задачи • Вопросы с собеса
readStream и writeStream, чтобы скопировать файл (или все файлы из папки) с одного диска на другой, сохраняя низкое использование памяти.Библиотека пхпшника
📍 Навигация: Вакансии • Задачи • Вопросы с собеса
This media is not supported in your browser
VIEW IN TELEGRAM
Умная навигация для PHP-проектов в вебе
Современный PHP — это строгая типизация, интерфейсы и активное использование DI. Читать такой код как простой текст во время код-ревью сложно: нужно понимать, какой именно класс скрывается за интерфейсом и где он реализован.
Платформа SourceCraft переносит удобство PHPStorm в браузер. В интерфейсе пулл-реквеста работают переходы к определениям классов, методов и констант. Это позволяет проводить глубокое ревью архитектуры и логики без необходимости переключаться на локальную машину.
Попробуйте, как это ускоряет процесс → https://sourcecraft.dev/code-navigation-demo/uikit/pr/2040
Современный PHP — это строгая типизация, интерфейсы и активное использование DI. Читать такой код как простой текст во время код-ревью сложно: нужно понимать, какой именно класс скрывается за интерфейсом и где он реализован.
Платформа SourceCraft переносит удобство PHPStorm в браузер. В интерфейсе пулл-реквеста работают переходы к определениям классов, методов и констант. Это позволяет проводить глубокое ревью архитектуры и логики без необходимости переключаться на локальную машину.
Попробуйте, как это ускоряет процесс → https://sourcecraft.dev/code-navigation-demo/uikit/pr/2040
🔥7
🎓 Твой опыт стоит дорого — стань экспертом Proglib Academy
Чувствуешь, что накопил достаточно знаний, чтобы делиться ими с другими?
Мы ищем сильных практиков, которые хотят попробовать себя в роли:
— преподавателей;
— авторов курсов;
— наставников.
Это возможность не только монетизировать экспертизу, но и прокачать личный бренд, структурировать собственные знания и вырастить новое поколение специалистов.
👉 Заполни короткую анкету
Чувствуешь, что накопил достаточно знаний, чтобы делиться ими с другими?
Мы ищем сильных практиков, которые хотят попробовать себя в роли:
— преподавателей;
— авторов курсов;
— наставников.
Это возможность не только монетизировать экспертизу, но и прокачать личный бренд, структурировать собственные знания и вырастить новое поколение специалистов.
👉 Заполни короткую анкету
Коллеги, в PHP всё чаще требуют не только код, но и понимание, как он живёт в проде.
Docker, CI/CD, деплой, очереди — это уже базовый минимум.
Чтобы не разбираться в этом в последний момент перед собесом или релизом, читайте DevOps-канал из нашей сетки.
Практика, реальные кейсы, без лишней теории.
👉 Библиотека DevOps — @devopsslib
Docker, CI/CD, деплой, очереди — это уже базовый минимум.
Чтобы не разбираться в этом в последний момент перед собесом или релизом, читайте DevOps-канал из нашей сетки.
Практика, реальные кейсы, без лишней теории.
👉 Библиотека DevOps — @devopsslib
PHP жив, а легаси можно взбодрить Агентами
Представьте: старый добрый Laravel-проект, к которому подключены AI-агенты. Они разбирают тикеты поддержки, генерируют контент и анализируют логи. Это реалии 2026 года.
Мы полностью обновили курс «Разработка AI-агентов».
Раньше это было "для ML-щиков". Теперь — для всех, кто хочет делать современный веб.
Фичи:
— LangFlow: Визуальное программирование логики (No-code трек).
— Интеграции: Как подружить агентов с базой и API.
— Практика: Создание реальных помощников для бизнеса.
🎁 Акция 3 в 1:
Берешь курс по агентам — получаешь два курса в подарок. Отличный повод наконец-то выучить алгоритмы или базу компьютерных наук.
Врываемся в будущее
Представьте: старый добрый Laravel-проект, к которому подключены AI-агенты. Они разбирают тикеты поддержки, генерируют контент и анализируют логи. Это реалии 2026 года.
Мы полностью обновили курс «Разработка AI-агентов».
Раньше это было "для ML-щиков". Теперь — для всех, кто хочет делать современный веб.
Фичи:
— LangFlow: Визуальное программирование логики (No-code трек).
— Интеграции: Как подружить агентов с базой и API.
— Практика: Создание реальных помощников для бизнеса.
🎁 Акция 3 в 1:
Берешь курс по агентам — получаешь два курса в подарок. Отличный повод наконец-то выучить алгоритмы или базу компьютерных наук.
Врываемся в будущее
🥱7
💡Совет по Laravel: метод «withToken()»
Знаете ли вы, что HTTP-клиент Laravel имеет метод
Библиотека пхпшника
📍 Навигация: Вакансии • Задачи • Вопросы с собеса
#vardump
Знаете ли вы, что HTTP-клиент Laravel имеет метод
withToken(), который можно использовать для установки токенов беарера? 🚀Библиотека пхпшника
📍 Навигация: Вакансии • Задачи • Вопросы с собеса
#vardump
👍14
Пишем HTTP-сервер на php и сокетах
Если вы пишете на PHP, то Apache или Nginx — привычный фон. Но чтобы реально понять HTTP, полезно однажды собрать сервер своими руками.
В статье разбирается базовая механика HTTP без магии фреймворков:
— что на самом деле делает HTTP-сервер
— как выглядит «сырой» HTTP-запрос и ответ
— где заканчиваются заголовки и начинается тело
— как слушать порт и принимать соединения в PHP
— как написать минимальный HTTP-сервер через
В итоге получается рабочий сервер на чистом PHP: принимает запросы, парсит метод/путь/заголовки и возвращает корректные HTTP-ответы.
🔗 Хабр
Библиотека пхпшника
Если вы пишете на PHP, то Apache или Nginx — привычный фон. Но чтобы реально понять HTTP, полезно однажды собрать сервер своими руками.
В статье разбирается базовая механика HTTP без магии фреймворков:
— что на самом деле делает HTTP-сервер
— как выглядит «сырой» HTTP-запрос и ответ
— где заканчиваются заголовки и начинается тело
— как слушать порт и принимать соединения в PHP
— как написать минимальный HTTP-сервер через
stream_socket_server()В итоге получается рабочий сервер на чистом PHP: принимает запросы, парсит метод/путь/заголовки и возвращает корректные HTTP-ответы.
🔗 Хабр
Библиотека пхпшника
🔥9❤3
Forwarded from Библиотека задач по PHP | тесты, код, задания
Что будет результатом выполнения данного скрипта?
🌚5😁1
Forwarded from Библиотека задач по PHP | тесты, код, задания
Что будет результатом выполнения данного скрипта?
Anonymous Quiz
5%
Notice
4%
cl1::f2()cl1::f2()
46%
Singleton::f1()cl1::f2()
5%
Singleton::f1()cl1::f1()
39%
Fatal Error
Как Geocodio поддерживает в актуальном состоянии 300 миллионов адресов
Geocodio поддерживает актуальность более 300 миллионов адресов с помощью собственной системы обработки данных Chop Chop.
Как обновляются адресные данные
Адреса постоянно меняются: появляются новые дома, улицы, пересматриваются границы участков. Чтобы поддерживать базу в актуальном состоянии, Geocodio использует почти 3 000 источников данных и автоматизированный конвейер обработки.
Система Chop Chop
Chop Chop — внутренняя платформа компании, построенная на Laravel и SQLite. Она управляет поступающими данными, очищает, нормализует и проверяет их. Благодаря системе очередей в Laravel Horizon данные из сотен источников обрабатываются параллельно на мощных серверах.
В системе есть визуальный редактор, позволяющий корректировать данные вручную. Для массовых исправлений используются SQL-запросы.
Этапы обработки данных
1. Получение данных — большинство источников (городские и окружные администрации) обновляются еженедельно.
2. Конвертация форматов — сырые данные приводятся к единому виду (GeoJSON).
3. Обогащение — добавляются недостающие почтовые коды, города, корректируются адресные записи.
4. Валидация — проверяются корректность номеров домов, координат и других параметров. Если качество данных низкое, они отбрасываются (до 30% записей).
5. Проверка изменений — если в новой версии есть значительные отличия, их передают на ручную проверку.
Развертывание обновлений
Каждую ночь Chop Chop собирает свежие данные в агрегированную базу SQLite. Затем тестируется геокодер, и перед развертыванием изменений их проверяет человек.
Благодаря заранее подготовленным копиям базы данных обновления разворачиваются быстро — достаточно переключить систему на новую версию.
👉Читать подробнее
Geocodio поддерживает актуальность более 300 миллионов адресов с помощью собственной системы обработки данных Chop Chop.
Как обновляются адресные данные
Адреса постоянно меняются: появляются новые дома, улицы, пересматриваются границы участков. Чтобы поддерживать базу в актуальном состоянии, Geocodio использует почти 3 000 источников данных и автоматизированный конвейер обработки.
Система Chop Chop
Chop Chop — внутренняя платформа компании, построенная на Laravel и SQLite. Она управляет поступающими данными, очищает, нормализует и проверяет их. Благодаря системе очередей в Laravel Horizon данные из сотен источников обрабатываются параллельно на мощных серверах.
В системе есть визуальный редактор, позволяющий корректировать данные вручную. Для массовых исправлений используются SQL-запросы.
Этапы обработки данных
1. Получение данных — большинство источников (городские и окружные администрации) обновляются еженедельно.
2. Конвертация форматов — сырые данные приводятся к единому виду (GeoJSON).
3. Обогащение — добавляются недостающие почтовые коды, города, корректируются адресные записи.
4. Валидация — проверяются корректность номеров домов, координат и других параметров. Если качество данных низкое, они отбрасываются (до 30% записей).
5. Проверка изменений — если в новой версии есть значительные отличия, их передают на ручную проверку.
Развертывание обновлений
Каждую ночь Chop Chop собирает свежие данные в агрегированную базу SQLite. Затем тестируется геокодер, и перед развертыванием изменений их проверяет человек.
Благодаря заранее подготовленным копиям базы данных обновления разворачиваются быстро — достаточно переключить систему на новую версию.
👉Читать подробнее
❤2
📚 Psl — Современный, централизованный, хорошо типизированный, неблокируемый набор API
Библиотека представляет собой современную, согласованную, централизованную и строго типизированную стандартную библиотеку для PHP. Ее цель — предоставить разработчикам PHP набор неблокирующих API, которые упрощают и стандартизируют выполнение общих задач, таких как работа со строками, массивами, генерация случайных чисел и другие операции.
Использование этой библиотеки может поспособствовать повышению качества и читаемости кода, обеспечивая единообразие и надежность при решении повседневных задач.
🔗Github
Библиотека пхпшника
#инструменты
Библиотека представляет собой современную, согласованную, централизованную и строго типизированную стандартную библиотеку для PHP. Ее цель — предоставить разработчикам PHP набор неблокирующих API, которые упрощают и стандартизируют выполнение общих задач, таких как работа со строками, массивами, генерация случайных чисел и другие операции.
Использование этой библиотеки может поспособствовать повышению качества и читаемости кода, обеспечивая единообразие и надежность при решении повседневных задач.
🔗Github
Библиотека пхпшника
#инструменты
🔐 How-to: быстрая подготовка Laravel к пентесту
Грамотная подготовка к пентесту экономит время, деньги и нервы. Ниже — практичный чек-лист для PHP/Laravel-команд, чтобы тест выявил реальные уязвимости, а не очевидные косяки.
1️⃣ Документация
актуальная архитектура и окружения;
описание ключевых роутов и бизнес-флоу;
краткие заметки для тестеров.
2️⃣ Доступы
отдельные тестовые аккаунты с ролями;
никаких реальных данных;
allowlist IP при необходимости.
3️⃣ Разрешения
письменное согласие владельцев систем;
чёткий scope и сроки теста.
4️⃣ Коммуникация
предупредите dev/ops/management;
обозначьте риски и контакты для инцидентов.
5️⃣ Базовая безопасность Laravel
Eloquent / Query Builder → защита от SQLi
Blade + валидация → XSS
HTTPS + HSTS
rate-limit против DDoS
принцип минимальных прав
безопасная загрузка файлов
6️⃣ Зависимости
7️⃣ Перед стартом
backup БД и файлов;
включённые логи и мониторинг;
план реагирования.
🔗 Medium
Библиотека пхпшника
Грамотная подготовка к пентесту экономит время, деньги и нервы. Ниже — практичный чек-лист для PHP/Laravel-команд, чтобы тест выявил реальные уязвимости, а не очевидные косяки.
1️⃣ Документация
актуальная архитектура и окружения;
описание ключевых роутов и бизнес-флоу;
краткие заметки для тестеров.
2️⃣ Доступы
отдельные тестовые аккаунты с ролями;
никаких реальных данных;
allowlist IP при необходимости.
3️⃣ Разрешения
письменное согласие владельцев систем;
чёткий scope и сроки теста.
4️⃣ Коммуникация
предупредите dev/ops/management;
обозначьте риски и контакты для инцидентов.
5️⃣ Базовая безопасность Laravel
Eloquent / Query Builder → защита от SQLi
Blade + валидация → XSS
@csrf, Secure + SameSite cookiesHTTPS + HSTS
rate-limit против DDoS
принцип минимальных прав
безопасная загрузка файлов
APP_DEBUG=false, закрытые .env, storage, vendor6️⃣ Зависимости
composer auditcomposer update --dry-run roave/security-advisories7️⃣ Перед стартом
backup БД и файлов;
включённые логи и мониторинг;
план реагирования.
🔗 Medium
Библиотека пхпшника
❤3