Telegram Web Link
Полный курс PHP для начинающих и продвинутых

Full PHP 8 Tutorial
How To Install PHP & What Are Web Servers
Basic PHP Syntax
What Are Constants & Variable Variables In PHP
PHP Data Types - Typecasting Overview & How It Works
PHP Boolean Data Type
PHP Integer Data type
PHP Float Data Type
PHP String Data Type - Heredoc & Nowdoc Syntax
PHP Null Data Type

На данный момент доступно 139 видео
Какие есть типы индексов в бд?

Использование индексов в базах данных подразумевает их создание, просмотр и удаление для оптимизации запросов. Индексы ускоряют операции чтения (SELECT), но могут замедлить операции записи (INSERT, UPDATE, DELETE).

Общий синтаксис создания индекса выглядит следующим образом:

CREATE INDEX имя_индексаON имя_таблицы (столбец1 [ASC|DESC], столбец2 [ASC|DESC]);


Вот основные типы индексов:

1. Кластерные индексы (Clustered Index)
🔸 Упорядочивают данные в таблице в соответствии с индексом.
🔸 Каждая таблица может иметь только один кластерный индекс, так как физический порядок строк определяется им.
🔸 Пример: Первичный ключ часто создается как кластерный индекс.

Преимущества:

🔹 Быстрый доступ к данным в диапазонных запросах.
🔹 Эффективно при выборке упорядоченных данных.

Недостатки:

🔹 Медленные операции вставки, обновления и удаления, так как данные переносятся для сохранения порядка.

2. Некластерные индексы (Non-Clustered Index)
🔸 Содержат указатели на фактические строки данных.
🔸 Таблица может иметь несколько некластерных индексов.
🔸 Пример: Индексация столбца, который часто используется в условиях WHERE.

Преимущества:

🔹 Быстрый доступ к конкретным значениям.
🔹 Может использоваться для оптимизации запросов с различными столбцами.

Недостатки:

🔹 Дополнительное использование дискового пространства.
🔹 Замедление операций вставки, обновления и удаления.

3. Уникальные индексы (Unique Index)
🔸 Обеспечивают уникальность значений в одном или нескольких столбцах.
🔸 Пример: Индекс на email-адрес в таблице пользователей.

Преимущества:

🔹 Поддерживает целостность данных.
🔹 Повышает производительность запросов.

Недостатки:

🔹 Невозможно хранить дублирующиеся значения.

4. Составные индексы (Composite Index)
🔸 Создаются на основе нескольких столбцов.
🔸 Пример: Индекс на столбцы (lastname, firstname).

Преимущества:

🔹 Улучшает производительность запросов, где используются все или часть индекса.

Недостатки:

🔹 Требует внимательного проектирования, чтобы учитывать порядок столбцов.

5. Полнотекстовые индексы (Full-Text Index)
🔸 Используются для поиска текстовых данных, таких как документы или длинные текстовые поля.
🔸 Пример: Полнотекстовый поиск по колонке description в таблице товаров.

Преимущества:

🔹 Оптимизирован для поиска ключевых слов или фраз.

Недостатки:

🔹 Поддерживается не всеми СУБД.
🔹 Может занимать значительное место.

6. Битмап-индексы (Bitmap Index)
🔸 Представляют данные в виде битовых карт.
🔸 Чаще всего используются в столбцах с низкой кардинальностью (небольшим количеством уникальных значений).

Преимущества:

🔹 Эффективны для аналитических запросов и запросов с большими объемами данных.

Недостатки:

🔹 Не подходят для таблиц с частыми изменениями данных.

7. XML/JSON Индексы
🔸 Оптимизируют поиск в данных, хранящихся в XML или JSON-форматах.

Преимущества:

🔹 Ускоряют сложные запросы по вложенным структурам.

Недостатки:

🔹 Занимают дополнительное пространство.
🔹 Ограниченная поддержка в некоторых СУБД.

8. Пространственные индексы (Spatial Index)
🔸 Используются для работы с географическими и пространственными данными.
🔸 Пример: Индексация координат в базе данных геоинформационных систем.

Преимущества:

🔹 Эффективны для запросов, связанных с расстояниями, полигонами и геометрией.

9. Хэш-индексы (Hash Index)
🔸 Используют хэш-функции для индексирования данных.
🔸 Пример: Подходит для равенства (например, WHERE column = value).

Преимущества:

🔹 Очень быстрые запросы на точное совпадение.

Недостатки:

🔹 Не поддерживают диапазонные запросы.
🛠️Использование Laravel Tinker в Chrome DevTools

Статья о том, как интегрировать Laravel Tinker с Chrome DevTools для более удобной отладки и тестирования кода прямо в браузере.
Это позволяет быстрее проверять и экспериментировать с кодом Laravel, используя привычные инструменты Chrome.

https://www.amitmerchant.com/laravel-tinker-chrome-devtools/
This media is not supported in your browser
VIEW IN TELEGRAM
Совет по Laravel 💡

Один из моих любимых недокументированных советов, который я регулярно использую. Используйте "wasRecentlyCreated", чтобы проверить, была ли модель создана или найдена в базе данных.
Оптимизация SQL-запросов в PHP: избавляемся от тормозов! 🚀

Сегодня я покажу вам, как улучшить производительность SQL-запросов в PHP и избавиться от лишней нагрузки на базу данных.

1. Используйте подготовленные запросы
Не только защита от SQL-инъекций, но и кеширование запросов внутри СУБД!
Пример с PDO:


$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(['email' => $email]);
$user = $stmt->fetch();


2. Выбирайте только нужные данные
Зачем вам SELECT *, если нужно только id и name? Выбирайте только нужные колонки!


$stmt = $pdo->query("SELECT id, name FROM users");


3. Индексы – ваши друзья
Проверяйте, есть ли индексы на полях, которые часто используются в WHERE и JOIN. Без индексов база будет делать полный перебор строк!


CREATE INDEX idx_email ON users(email);


4. Избегайте N+1 запроса
Вместо 100 мелких запросов – один с JOIN.

Плохо (100 запросов в цикле!):


foreach ($users as $user) {
$stmt = $pdo->prepare("SELECT * FROM orders WHERE user_id = ?");
$stmt->execute([$user['id']]);
$orders[$user['id']] = $stmt->fetchAll();
}


Хорошо (один запрос):


$query = "SELECT users.id, users.name, orders.id as order_id
FROM users
LEFT JOIN orders ON users.id = orders.user_id";
$stmt = $pdo->query($query);
$result = $stmt->fetchAll();


5. Используйте кеширование
Храните частые запросы в Redis или Memcached, чтобы снизить нагрузку на базу.


$cacheKey = "users_list";
$users = $redis->get($cacheKey);

if (!$users) {
$users = $pdo->query("SELECT id, name FROM users")->fetchAll();
$redis->setex($cacheKey, 3600, json_encode($users));
}


Эти советы помогут вам ускорить ваш PHP-код, снизить нагрузку на базу данных и сделать сайт более отзывчивым.
Неиспользуемые определения в статическом анализе Behat

Разработчик поделился опытом оптимизации работы с тестами Behat. Он заметил, что некоторые определения, используемые в сценариях тестирования, больше не применяются и могут быть удалены. Это позволяет уменьшить объем кода, который нужно поддерживать и обновлять. Однако стандартные инструменты Behat не позволяют автоматически находить такие неиспользуемые элементы.

Проблема

Определения для тестов в Behat задаются специальными аннотациями или атрибутами. Эти определения используются в сценариях тестирования, записанных в feature-файлах. Со временем, по мере изменения сценариев, некоторые определения могут остаться невостребованными, но разработчики часто не замечают этого из-за высокой нагрузки и сосредоточенности на основной работе.

Решение через статический анализ
Для выявления неиспользуемых определений был предложен инструмент статического анализа. Он выполняет следующие шаги:

🔸Сканирует PHP-файлы на наличие определений (аннотации и атрибуты).
🔸Выделяет точные совпадения, регулярные выражения и именованные маски.
🔸Сопоставляет их с содержимым feature-файлов.

Пример анализа:

🔹Найдено 1036 определений: 747 точных, 106 с регулярными выражениями, 181 с именованными масками.
🔹Обнаружены 2 неиспользуемых определения, которые можно удалить.

Инструмент для работы: Behastan
Для реализации этого подхода был создан инструмент Behastan, интегрированный в утилиту Rector Swiss Knife. Она поддерживает проекты вплоть до PHP 7.2 и проста в использовании:

1. Установите утилиту:
composer require rector/swiss-knife --dev


2. Запустите анализ:
vendor/bin/swiss-knife behastan tests


Этот инструмент помогает поддерживать чистоту кода и предотвращает накопление ненужных определений. Подключив его к CI/CD, можно автоматизировать процесс и избежать ручных проверок.
PhpLDAPadmin - это веб инструмент управления данными LDAP для системных администраторов. Он обычно известен и называется "PLA".

При этом, PLA создан с учетом соответствия RFC LDAP, что позволяет использовать его с любым сервером LDAP

📌 Github
Как бороться с «загадочными» багами в PHP? 🤔

Сегодня хочу поговорить про одну из самых неприятных проблем в программировании — «загадочные» баги. Это те ошибки, которые возникают только в продакшене, исчезают при попытке дебага и доводят до нервного тика 😬.

🔍 Почему это происходит?
- Разные окружения — локально у вас PHP 8.2, а на сервере 7.4 (и вдруг match ломает весь код).
- Необработанные ошибки — ошибки скрыты @, а логи молчат.
- Состояние кэша — в OpCache или APCu залипла старая версия кода.
- Гонки потоков — скрипты выполняются параллельно и вмешиваются друг в друга.

🛠 Как с этим бороться?
1️⃣ Выключить OpCache на тестовом сервере
Это позволит быстрее проверять изменения и исключить залипание кода.

2️⃣ Настроить логирование
Включите error_reporting(E_ALL) и убедитесь, что display_errors=Off, а log_errors=On с путём к файлу логов.

3️⃣ Сравнить окружения
Используйте phpinfo() или php -m для проверки версий PHP и установленных модулей.

4️⃣ Включить трассировку ошибок
Xdebug поможет отследить стек вызовов, а Laravel Telescope покажет внутренности запроса.

5️⃣ Повторить проблему на копии продакшена
Запустите код в Docker с конфигом продакшена или создайте staging-сервер.

6️⃣ Подключить мониторинг и алерты
Инструменты типа Sentry, Bugsnag или New Relic помогут ловить ошибки раньше, чем их заметят пользователи.
Taran — инструмент нагрузочного тестирования

Простой инструмент для нагрузочного тестирования веб-приложений.

Написан на PHP 8.1+ с использованием консольного фреймворка Laravel Zero.

🔗 GitHub

#библиотека
⚡️ SQLAdmin — инструмент, превращающий ваши SQLAlchemy или SQLModel-модели в функциональный бэкенд-интерфейс за несколько минут.

Особенно в проекте радует поддержка как синхронных, так и асинхронных движков SQLAlchemy, что делает его универсальным выбором для современных проектов.

Интерфейс построен на Tabler — чистом и современном CSS-фреймворке, который не требует тонн JavaScript.

🤖 GitHub
🔥 Ковариантность и контравариантность в PHP — кратко и по сути

Эти термины звучат сложно, но суть у них простая. Разработчики используют их идеи постоянно — просто не всегда знают, как это называется. Ниже — простое объяснение с примерами.

🔍 Что это такое?

Ковариантность — когда метод возвращает более конкретный тип, чем у родителя.

Контравариантность — когда метод принимает менее конкретный тип, чем у родителя.

Ковариантность (return types)
PHP поддерживает ковариантность только для возвращаемых значений. Примеры:

float|intint

BaseClassChildClass

ExportableExportable&Cacheable

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

Контравариантность в return'ах
PHP не позволяет делать возвращаемый тип менее конкретным.
Например, int → float|int — вызовет ошибку.

Контравариантность (параметры)
А вот с параметрами всё наоборот — здесь PHP позволяет делать типы шире:

arrayarray|Collection

Traversable&CollectionCollection

EloquentCollectionCollection

Такой подход делает методы более гибкими при переопределении.

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

🚫 Конструкторы — отдельная история
Ковариантность и контравариантность на конструкторы не влияют. У них своя логика, и они не наследуются как обычные методы.

🔜 Статья
Please open Telegram to view this post
VIEW IN TELEGRAM
🕊️ RoadRunner — высокопроизводительный application server на Go. Этот проект заменяет связку Nginx+PHP-FPM, позволяя запускать PSR-7-совместимые приложения с поддержкой HTTP/3, WebSockets и даже Temporal workflow.

Конфигурация через .rr.yaml напоминает docker-compose: можно подключать очереди, кеш и метрики как плагины. Рабочие процессы PHP остаются в памяти, что даёт до 10x прирост скорости против традиционного FPM. Особенно радует встроенная система мониторинга и автоматические рестарты упавших воркеров.

🤖 GitHub
Сегодня расскажу про одну из самых частых болей в любом проекте на Laravel — отладку запросов с Eloquent и N+1 проблемой.

Ты наверняка сталкивался с ситуацией: всё работает, но чуть-чуть замедляется. Начинаешь копать и видишь кучу повторяющихся SQL-запросов. Это классическая N+1 проблема — когда вместо одного запроса Laravel делает десятки.

👀 Как это проявляется?

У тебя есть, например, список постов и у каждого поста автор:


$posts = Post::all();

foreach ($posts as $post) {
echo $post->user->name;
}


Laravel выполнит 1 запрос на посты и N запросов на пользователей. А должен был бы — 2 запроса максимум.

🛠 Решение простое — eager loading:


$posts = Post::with('user')->get();


Теперь Laravel сначала загрузит всех постов, а потом сразу всех юзеров одним вторым запросом.



📦 Но как быстро выявить такие ошибки?

Используй Laravel Debugbar или Clockwork. Они наглядно показывают все SQL-запросы и сразу виден N+1.

Ещё один вариант — в проде подключить Laravel Telescope, если это безопасно, или поставить простую логику, которая логирует количество SQL-запросов на каждый HTTP-запрос.


⚠️ Совет: всегда используй with() при выборке данных для списков, особенно если в шаблоне дергаешь связанные модели.
Программист PHP (Middle+/Senior)
#удаленка #middle+ #senior
Опыт работы: от 3 лет
Компания: P2PLong
ЗП: от 220 000 до 280 000 (Возможна выплата в USDT)

О проекте:
P2P-платформа для автоматического обмена валют. Проект уже функционирует и активно развивается. В связи с этим ищем разработчика в штат, с которым продолжим совместное развитие.

🔷Ожидания от кандидата:

Уверенное знание PHP
Уверенные знания Laravel, html, css
Умение верстки
Понимание паттернов проектирования
Умение оптимизировать SQL-запросы
Аккуратность, самостоятельность и ответственность

🔷Будет плюсом:

Опыт работы с React

🔷Наш основной стек:

Php 8.3
Laravel
MySql
Git
Docker

🔷Обязанности:

Поддержка существующего кода
Интеграция с внешними сервисами
Разработка нового функционала бек и фронт.

🔷Мы предлагаем:

Удаленная работа, гибкий график
Интересный перспективный проект
Отсутствие бюрократии
Возможно работать из любой точки мира и получать зарплату в USDT
Контакты: @mikhpletnev
Просьба сразу присылать CV
🛠️ Команды Artisan, которые ты не используешь (но зря)

Если ты думал, что artisan — это только serve и migrate, пришло время расширить горизонты.
Laravel CLI может значительно ускорить разработку, помочь в отладке и автоматизации.

📌 Полезные команды для работы с маршрутами:


php artisan route:list --method=POST

Покажет только POST-маршруты — удобно для отладки форм и API.


php artisan route:list --path=admin

Фильтрует маршруты по URI — пригодится, если работаешь с разделом админки.


php artisan route:list --only-vendor

Выводит только маршруты из сторонних пакетов — полезно при интеграции SDK и пакетов.

---

Генерация кода с помощью `make:` — быстро и эффективно


php artisan make:controller PostController --model=Post --requests --test

Создаёт контроллер с привязкой к модели, запросами валидации и тестами сразу.


php artisan make:model Post --all

Модель, миграция, фабрика, сидер, политика и контроллер — в одном пакете.

Сокращённо:

php artisan make:model Product -mcfs

`-m`igration, `-c`ontroller, `-f`actory, `-s`eeder.

🧠 Создавай свои команды и автоматизируй рутину


php artisan make:command CleanOldPosts


Пиши код внутри handle(), например:
- удаляй старые записи
- обрабатывай отчёты
- отправляй напоминания
- подключайся к API

Потом запускай вручную или через планировщик (`Task Scheduling`).

🔥 Artisan — это больше, чем кажется. Используй его как полноценный DevTool и перестань писать повторяющийся код руками.

📎 Сохрани себе

@phpshka
🔥 Успех в IT = скорость + знания + окружение

Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!

AI: www.tg-me.com/ai_machinelearning_big_data
Python: www.tg-me.com/pythonl
Linux: www.tg-me.com/linuxacademiya
Собеседования DS: www.tg-me.com/machinelearning_interview
C++ www.tg-me.com/cpluspluc
Docker: www.tg-me.com/DevopsDocker
Хакинг: www.tg-me.com/linuxkalii
Devops: www.tg-me.com/DevOPSitsec
Data Science: www.tg-me.com/data_analysis_ml
Javascript: www.tg-me.com/javascriptv
C#: www.tg-me.com/csharp_ci
Java: www.tg-me.com/java_library
Базы данных: www.tg-me.com/sqlhub
Python собеседования: www.tg-me.com/python_job_interview
Мобильная разработка: www.tg-me.com/mobdevelop
Golang: www.tg-me.com/Golang_google
React: www.tg-me.com/react_tg
Rust: www.tg-me.com/rust_code
ИИ: www.tg-me.com/vistehno
PHP: www.tg-me.com/phpshka
Android: www.tg-me.com/android_its
Frontend: www.tg-me.com/front
Big Data: www.tg-me.com/bigdatai
МАТЕМАТИКА: www.tg-me.com/data_math
Kubernets: www.tg-me.com/kubernetc
Разработка игр: https://www.tg-me.com/gamedev
Haskell: www.tg-me.com/haskell_tg
Физика: www.tg-me.com/fizmat

💼 Папка с вакансиями: www.tg-me.com/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: www.tg-me.com/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: www.tg-me.com/addlist/eEPya-HF6mkxMGIy
Папка ML: https://www.tg-me.com/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://www.tg-me.com/addlist/mzMMG3RPZhY2M2Iy

😆ИТ-Мемы: www.tg-me.com/memes_prog
🇬🇧Английский: www.tg-me.com/english_forprogrammers
🧠ИИ: www.tg-me.com/vistehno

🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://www.tg-me.com/addlist/BkskQciUW_FhNjEy

Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
Команды Artisan, которые вы не используете (но определенно должны)

Если вы думали, что Artisan — это только для запуска сервера и миграций, пора взглянуть шире. Этот мощный CLI-инструмент может значительно ускорить разработку, упростить отладку и помочь лучше понять Laravel.

📌 Полезные команды для работы с маршрутами:
php artisan route:list --method=POST — показывает только POST-маршруты (удобно при отладке форм или API)
php artisan route:list --path=admin — фильтрует маршруты по пути, например, для админки
php artisan route:list --only-vendor — список маршрутов от сторонних пакетов

️ Крутые make: команды для генерации кода:
php artisan make:controller PostController --model=Post --requests --test — создаёт контроллер с привязкой к модели, запросами валидации и тестами
php artisan make:model Post --all — генерация модели, миграции, фабрики, сидера, политики и контроллера одним махом!
Сокращённые флаги: php artisan make:model Product -mcfs (migration, controller, factory, seeder)

🛠️ Создавайте свои Artisan команды и автоматизируйте рутину:

php artisan make:command CleanOldPosts

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

👉 Читать статью
FastExcelWriter — избавление от проклятия PhpSpreadsheet

Наверняка каждый php-разработчик, хоть раз сталкивавшийся с чтением или записью Excel-файлов, знает про библиотеку PhpSpreadsheet (в прошлом - PHPExcel). Это мощная библиотека на чистом php, которая позволяет читать, а, главное, создавать Excel-таблицы. И все с ней хорошо, пока работаешь с небольшим набором данных. Но при работе с большими файлами PhpSpreadsheet начинает чудовищно отжирать память, да и производительность резко падает, и php-скрипт, использующий библиотеку, часто просто отваливается по таймауту. И проблема - в архитектуре библиотеки.

Библиотека PhpSpreadsheet, казалось бы, спроектирована очень правильно: листы таблицы, строки, ячейки, прочие сущности - это все классы, стили, форматы и всевозможные свойства тоже состоят из классов. И когда создается таблица, то в памяти создается огромное количество связанных между собой объектов, им задаются свойства, выполняются всевозможные манипуляции, ячейки заполняются данными, всё-всё это держится в памяти, и пишется в файл только в момент сохранения.

https://habr.com/ru/articles/904710/
🧹 Команда дня: Очистка кеша Composer

composer clear-cache

Зачем это нужно?

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

🔸 обновления зависимостей «не видятся»;

🔸 Composer использует устаревшие версии;

🔸 баги или непредсказуемое поведение при установке/обновлении пакетов.

В таких случаях первое, что стоит попробовать — очистить кеш.

Когда это особенно полезно:

🔹 После смены версии PHP или Composer.
🔹 После редактирования composer.json вручную.
🔹 При сбоях в composer install или composer update.
🔹 Если Composer «видит» зависимости, которых уже нет.

Где живёт кеш?
По умолчанию:
macOS / Linux: ~/.composer/cache
Windows: %LOCALAPPDATA%\Composer\Cache

Хорошо сочетать с полной переустановкой зависимостей:


rm -rf vendor/ composer.lock



composer clear-cache

composer install


Используйте в CI при странных ошибках установки зависимостей.

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

🧠 Бонус: посмотреть размер кеша

du -sh ~/.composer/cache
2025/06/28 04:27:21
Back to Top
HTML Embed Code: