Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Полный курс 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 видео
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).
Общий синтаксис создания индекса выглядит следующим образом:
Вот основные типы индексов:
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).
Преимущества:
🔹 Очень быстрые запросы на точное совпадение.
Недостатки:
🔹 Не поддерживают диапазонные запросы.
Использование индексов в базах данных подразумевает их создание, просмотр и удаление для оптимизации запросов. Индексы ускоряют операции чтения (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/
Статья о том, как интегрировать 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:
2. Выбирайте только нужные данные
Зачем вам
3. Индексы – ваши друзья
Проверяйте, есть ли индексы на полях, которые часто используются в
4. Избегайте N+1 запроса
Вместо 100 мелких запросов – один с
❌ Плохо (100 запросов в цикле!):
✅ Хорошо (один запрос):
5. Используйте кеширование
Храните частые запросы в Redis или Memcached, чтобы снизить нагрузку на базу.
Эти советы помогут вам ускорить ваш 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. Установите утилиту:
2. Запустите анализ:
Этот инструмент помогает поддерживать чистоту кода и предотвращает накопление ненужных определений. Подключив его к CI/CD, можно автоматизировать процесс и избежать ручных проверок.
Разработчик поделился опытом оптимизации работы с тестами 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
При этом, PLA создан с учетом соответствия RFC LDAP, что позволяет использовать его с любым сервером LDAP
📌 Github
Как бороться с «загадочными» багами в PHP? 🤔
Сегодня хочу поговорить про одну из самых неприятных проблем в программировании — «загадочные» баги. Это те ошибки, которые возникают только в продакшене, исчезают при попытке дебага и доводят до нервного тика 😬.
🔍 Почему это происходит?
- Разные окружения — локально у вас PHP 8.2, а на сервере 7.4 (и вдруг
- Необработанные ошибки — ошибки скрыты
- Состояние кэша — в OpCache или APCu залипла старая версия кода.
- Гонки потоков — скрипты выполняются параллельно и вмешиваются друг в друга.
🛠 Как с этим бороться?
1️⃣ Выключить OpCache на тестовом сервере
Это позволит быстрее проверять изменения и исключить залипание кода.
2️⃣ Настроить логирование
Включите
3️⃣ Сравнить окружения
Используйте
4️⃣ Включить трассировку ошибок
Xdebug поможет отследить стек вызовов, а Laravel Telescope покажет внутренности запроса.
5️⃣ Повторить проблему на копии продакшена
Запустите код в Docker с конфигом продакшена или создайте staging-сервер.
6️⃣ Подключить мониторинг и алерты
Инструменты типа Sentry, Bugsnag или New Relic помогут ловить ошибки раньше, чем их заметят пользователи.
Сегодня хочу поговорить про одну из самых неприятных проблем в программировании — «загадочные» баги. Это те ошибки, которые возникают только в продакшене, исчезают при попытке дебага и доводят до нервного тика 😬.
🔍 Почему это происходит?
- Разные окружения — локально у вас 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
#библиотека
Простой инструмент для нагрузочного тестирования веб-приложений.
Написан на PHP 8.1+ с использованием консольного фреймворка Laravel Zero.
🔗 GitHub
#библиотека
GitHub
GitHub - maximal/taran: Web applications and servers benchmarking tool.
Web applications and servers benchmarking tool. Contribute to maximal/taran development by creating an account on GitHub.
⚡️ SQLAdmin — инструмент, превращающий ваши SQLAlchemy или SQLModel-модели в функциональный бэкенд-интерфейс за несколько минут.
Особенно в проекте радует поддержка как синхронных, так и асинхронных движков SQLAlchemy, что делает его универсальным выбором для современных проектов.
Интерфейс построен на Tabler — чистом и современном CSS-фреймворке, который не требует тонн JavaScript.
🤖 GitHub
Особенно в проекте радует поддержка как синхронных, так и асинхронных движков SQLAlchemy, что делает его универсальным выбором для современных проектов.
Интерфейс построен на Tabler — чистом и современном CSS-фреймворке, который не требует тонн JavaScript.
🤖 GitHub
Эти термины звучат сложно, но суть у них простая. Разработчики используют их идеи постоянно — просто не всегда знают, как это называется. Ниже — простое объяснение с примерами.
🔍 Что это такое?
Ковариантность — когда метод возвращает более конкретный тип, чем у родителя.
Контравариантность — когда метод принимает менее конкретный тип, чем у родителя.
✅ Ковариантность (return types)
PHP поддерживает ковариантность только для возвращаемых значений. Примеры:
float|int
→ int
BaseClass
→ ChildClass
Exportable
→ Exportable&Cacheable
Можно «сузить» возвращаемый тип в дочернем классе — и это будет валидно.
❌ Контравариантность в return'ах
PHP не позволяет делать возвращаемый тип менее конкретным.
Например,
int → float|int
— вызовет ошибку.✅ Контравариантность (параметры)
А вот с параметрами всё наоборот — здесь PHP позволяет делать типы шире:
array
→ array|Collection
Traversable&Collection
→ Collection
EloquentCollection
→ Collection
Такой подход делает методы более гибкими при переопределении.
❌ Ковариантность в параметрах
Нельзя в параметрах делать тип более конкретным, чем у родителя. Это приведёт к ошибке.
🚫 Конструкторы — отдельная история
Ковариантность и контравариантность на конструкторы не влияют. У них своя логика, и они не наследуются как обычные методы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🕊️ RoadRunner — высокопроизводительный application server на Go. Этот проект заменяет связку Nginx+PHP-FPM, позволяя запускать PSR-7-совместимые приложения с поддержкой HTTP/3, WebSockets и даже Temporal workflow.
Конфигурация через
🤖 GitHub
Конфигурация через
.rr.yaml
напоминает docker-compose: можно подключать очереди, кеш и метрики как плагины. Рабочие процессы PHP остаются в памяти, что даёт до 10x прирост скорости против традиционного FPM. Особенно радует встроенная система мониторинга и автоматические рестарты упавших воркеров. 🤖 GitHub
Сегодня расскажу про одну из самых частых болей в любом проекте на Laravel — отладку запросов с Eloquent и N+1 проблемой.
Ты наверняка сталкивался с ситуацией: всё работает, но чуть-чуть замедляется. Начинаешь копать и видишь кучу повторяющихся SQL-запросов. Это классическая N+1 проблема — когда вместо одного запроса Laravel делает десятки.
👀 Как это проявляется?
У тебя есть, например, список постов и у каждого поста автор:
Laravel выполнит 1 запрос на посты и N запросов на пользователей. А должен был бы — 2 запроса максимум.
🛠 Решение простое — eager loading:
Теперь Laravel сначала загрузит всех постов, а потом сразу всех юзеров одним вторым запросом.
📦 Но как быстро выявить такие ошибки?
Используй Laravel Debugbar или Clockwork. Они наглядно показывают все SQL-запросы и сразу виден N+1.
Ещё один вариант — в проде подключить Laravel Telescope, если это безопасно, или поставить простую логику, которая логирует количество SQL-запросов на каждый HTTP-запрос.
⚠️ Совет: всегда используй
Ты наверняка сталкивался с ситуацией: всё работает, но чуть-чуть замедляется. Начинаешь копать и видишь кучу повторяющихся 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
#удаленка #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, которые ты не используешь (но зря)
Если ты думал, что
Laravel CLI может значительно ускорить разработку, помочь в отладке и автоматизации.
📌 Полезные команды для работы с маршрутами:
Покажет только POST-маршруты — удобно для отладки форм и API.
Фильтрует маршруты по URI — пригодится, если работаешь с разделом админки.
Выводит только маршруты из сторонних пакетов — полезно при интеграции SDK и пакетов.
---
⚡ Генерация кода с помощью `make:` — быстро и эффективно
Создаёт контроллер с привязкой к модели, запросами валидации и тестами сразу.
Модель, миграция, фабрика, сидер, политика и контроллер — в одном пакете.
Сокращённо:
`-m`igration, `-c`ontroller, `-f`actory, `-s`eeder.
🧠 Создавай свои команды и автоматизируй рутину
Пиши код внутри
- удаляй старые записи
- обрабатывай отчёты
- отправляй напоминания
- подключайся к API
Потом запускай вручную или через планировщик (`Task Scheduling`).
🔥 Artisan — это больше, чем кажется. Используй его как полноценный DevTool и перестань писать повторяющийся код руками.
📎 Сохрани себе
@phpshka
Если ты думал, что
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
Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!
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.
📌 Полезные команды для работы с маршрутами:
⚡️ Крутые make: команды для генерации кода:
Сокращённые флаги:
🛠️ Создавайте свои 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/
Наверняка каждый php-разработчик, хоть раз сталкивавшийся с чтением или записью Excel-файлов, знает про библиотеку PhpSpreadsheet (в прошлом - PHPExcel). Это мощная библиотека на чистом php, которая позволяет читать, а, главное, создавать Excel-таблицы. И все с ней хорошо, пока работаешь с небольшим набором данных. Но при работе с большими файлами PhpSpreadsheet начинает чудовищно отжирать память, да и производительность резко падает, и php-скрипт, использующий библиотеку, часто просто отваливается по таймауту. И проблема - в архитектуре библиотеки.
Библиотека PhpSpreadsheet, казалось бы, спроектирована очень правильно: листы таблицы, строки, ячейки, прочие сущности - это все классы, стили, форматы и всевозможные свойства тоже состоят из классов. И когда создается таблица, то в памяти создается огромное количество связанных между собой объектов, им задаются свойства, выполняются всевозможные манипуляции, ячейки заполняются данными, всё-всё это держится в памяти, и пишется в файл только в момент сохранения.
https://habr.com/ru/articles/904710/
🧹 Команда дня: Очистка кеша Composer
Зачем это нужно?
Composer кеширует метаданные пакетов и архивы, чтобы ускорять работу. Это удобно, но в некоторых случаях кеш может стать источником проблем:
🔸 обновления зависимостей «не видятся»;
🔸 Composer использует устаревшие версии;
🔸 баги или непредсказуемое поведение при установке/обновлении пакетов.
В таких случаях первое, что стоит попробовать — очистить кеш.
Когда это особенно полезно:
🔹 После смены версии PHP или Composer.
🔹 После редактирования
🔹 При сбоях в
🔹 Если Composer «видит» зависимости, которых уже нет.
Где живёт кеш?
По умолчанию:
macOS / Linux:
Windows:
✅ Используйте в CI при странных ошибках установки зависимостей.
✅ Если вы используете Docker, убедитесь, что кеш не залипает внутри контейнера.
🧠 Бонус: посмотреть размер кеша
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