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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
Какие процессы происходят, когда пользователь вводит в браузере URL?

Когда пользователь вводит URL в браузере, происходит следующая последовательность процессов:

1. Парсинг URL: Браузер анализирует введенный URL, чтобы выделить протокол, доменное имя и путь к ресурсу.

2. DNS-поиск: Браузер отправляет запрос к DNS-серверу для получения IP-адреса, связанного с доменным именем. DNS-сервер возвращает IP-адрес браузеру.

3. Установка TCP-соединения: Браузер устанавливает TCP-соединение с веб-сервером, используя полученный IP-адрес и порт (обычно порт 80 для HTTP или порт 443 для HTTPS).

4. Отправка HTTP-запроса: Браузер отправляет HTTP-запрос на сервер, включая метод запроса (GET, POST и т.д.), заголовки и URI (Uniform Resource Identifier), который содержит запрошенный ресурс.

5. Обработка и выполнение запроса на сервере: Веб-сервер получает HTTP-запрос, выполняет обработку и обращается к соответствующему приложению или файлу. На этом этапе сервер может также взаимодействовать с базой данных или другими серверами для получения данных, необходимых для формирования ответа.

6. Подготовка HTTP-ответа: Сервер формирует HTTP-ответ, включающий статус запроса, заголовки и содержимое. Код состояния (например, 200 для успешного запроса) указывает на результат обработки запроса.

7. Передача HTTP-ответа: Сформированный HTTP-ответ передается обратно по TCP-соединению на браузер клиента.

8. Обработка HTTP-ответа: Браузер получает HTTP-ответ, анализирует статус запроса и заголовки. Если запрос был успешным, браузер начинает загружать и отображать содержимое ответа (HTML, CSS, JavaScript, изображения и т.д.).

9. Рендеринг и отображение: Браузер обрабатывает полученное содержимое, выполняет интерпретацию HTML, применяет стили CSS, обрабатывает скрипты JavaScript и, в конечном итоге, отображает запрошенную веб-страницу на экране пользователя

#вопросы_с_собеседований
👍25🥱5🔥1
Решение проблем масштабирования PHP

Команда разработчиков столкнулась с проблемой памяти при экспорте данных в Excel файлы в PHP-проекте. Проблема заключалась в том, что каждый фоновый задача открывала файл, добавляла порцию записей и закрывала файл, что приводило к увеличению потребления памяти.

После многих неудачных попыток решить проблему в PHP, команда решила переписать этот процесс на языке программирования Rust.
Rust был выбран из-за своей эффективности в управлении памятью, поддержки параллельности и безопасности в работе с потоками.

После преодоления кривого обучения команда смогла успешно реализовать новую систему экспорта, которая управляет памятью более эффективно и обеспечивает высокую производительность при обработке больших объемов данных. Для связи между PHP и Rust используется Redis и HTTP-вебхуки.
👍7🥱1
Verify Domain

PHP Verify Domain позволяет проверить принадлежность домена, проверив содержимое загруженного файла, метатеги и TXT-записи DNS. Вы могли наблюдать подобное поведение при проверке домена в таких сервисах, как "Google Search Console" и ...

Подробнее о пакете Verify Domain вы можете узнать из этой статьи.
🌚21
85% разработчиков готовятся к собеседованиям

Мы опросили студентов Proglib, которые устроились в международные компании, чтобы выяснить, как у них получилось успешно пройти собеседование?

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

Тренироваться можно самостоятельно, но если у вас не хватает мотивации заниматься регулярно, то рекомендуем курс «Алгоритмы и структуры данных»‎.

Подробности здесь – https://proglib.io/w/3b4ab5e4

А также до 15 октября по промокоду PROG20OCT вы получите дополнительную скидку 20%.

⚡️Начните с бесплатной части уже сегодня – https://proglib.io/w/3b4ab5e4
🥱52👍1
Match vs Switch

В статье рассматривается нововведение в PHP 8 - выражение match, сравнивая его с уже существующим оператором switch. Статья подчеркивает основные различия между match и switch, включая возможность match возвращать значение, использование break в switch, обработку ошибок и строгое сравнение в match. Кроме того, статья подчеркивает, что match и switch имеют различные сценарии использования и не являются взаимозаменяемыми.
🥱9👍31
Stat cache - это механизм кэширования результатов низкоуровневых операций чтения информации о файлах (например, права доступа, размер, время последнего изменения) в PHP. Когда вы вызываете несколько операций работы с файловой системой на одном и том же файле быстро подряд, PHP использует stat cache для оптимизации производительности.

Основной момент, который стоит отметить, заключается в том, что stat cache кэширует информацию только для одного файла. Если PHP выполняет низкоуровневую операцию на файле и он не был в кэше ранее, он перезапишет предыдущие данные, связанные с предыдущим файлом.

Статья также предоставляет пример того, как могла бы быть реализована stat cache на уровне PHP, и указывает на важность знания о том, как она работает. Она также подчеркивает, что для избежания ошибок в PHP коде, связанных с этим механизмом, иногда приходится использовать функцию clearstatcache(), чтобы очистить кэш.
👍91
Persistent-request библиотека для надежных запросов

В этой статье рассказывается о создании библиотеки PersistentRequest для гарантированного выполнения запросов и их обработки в среде Laravel.

🎯 Цели создания библиотеки:

Работа с Laravel
Легкость и гибкость использования
Минимум зависимостей

🔍 Что вы узнаете:

Как установить библиотеку через Composer
Инициализация сервиса и создание объектов запросов
Гарантированное выполнение запросов с возможностью повтора
Гибкая настройка логики обработки ответов

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

Гарантированное выполнение запросов в асинхронной среде
Легкость настройки и минимум зависимостей
Пользовательская обработка ответов и возможность повторных попыток
5👍1
Объявления типов в Symfony 7.0

Статья рассказывает о длительной инициативе Symfony по добавлению всех возможных объявлений типов в PHP в свой код. Этот процесс начался в Symfony 5, продолжился в Symfony 6 и приближается к завершению в Symfony 7.0.

Добавление объявлений типов требует осторожности, так как это нарушает обратную совместимость в большинстве случаев. В соответствии с процессом выпуска Symfony, такие изменения разрешены только в мажорных версиях (например, 6.0 и 7.0).

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

Цель Symfony 7.0 - добавить каждое возможное объявление типа в PHP. Она включает в себя:

🟠Добавление типов возвращаемых значений для всех методов, которые были пропущены или упущены в Symfony 6.0;
🟠Добавление типа 'void' там, где это применимо;
🟠Добавление типов для всех свойств класса, включая публичные и защищенные свойства.
18👍3
Что такое stateless?

В контексте PHP, термин "stateless" относится к тому, что каждый запрос к серверу обрабатывается независимо от предыдущих запросов. Другими словами, сервер не сохраняет состояния между запросами от клиента, что означает, что он не будет запоминать информацию о клиенте после обработки запроса и не будет использовать ее для последующих запросов.

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

Большинство веб-приложений на PHP по умолчанию являются stateless, как и множество других веб-технологий. Однако, в PHP есть способы сохранения состояния, если это нужно для приложения. Например, использование куки (cookies) или сессий (sessions), что позволяет сохранять информацию между запросами от клиента.

#вопросы_с_собеседований
11👍3🌚3
Введение в CodefyPHP

Эта статья представляет новый PHP-фреймворк под названием CodefyPHP, который был выпущен недавно. Фреймворк предназначен для разработки сложных приложений с использованием Domain-Driven Design (DDD), CQRS (Command Query Responsibility Segregation) и Event Sourcing.

CodefyPHP не является полноценным фреймворком, как Symfony, Codeigniter, Yii2, FuelPHP или Laravel, но он содержит компоненты, такие как маршрутизация, миграции базы данных, реализации множественных стандартов PSR и шаблонизация. Фреймворк обладает рядом функциональностей, включая инструменты командной строки (CLI) для генерации миграций, контроллеров, промежуточного ПО, поставщиков услуг и других элементов. Он также включает поддержку тестирования (Test-Driven Development) и два движка шаблонов.

🌟 CodefyPHP предоставляет несколько выдающихся функций:

✔️Codex CLI: Интерфейс командной строки для генерации миграций, контроллеров, сервис-провайдеров и даже запуска сервера разработки! 💻

Примеры команд:

php codex serve - Запустить сервер разработки
php codex stub:make Users_controller - Создать UsersController
php codex migrate:generate CreateUsersTable - Генерировать миграцию для создания таблицы пользователей

✔️Движок миграций базы данных: Простой способ контролировать версии базы данных с миграциями! 🗃️

✔️Двойные шаблонизаторы: CodefyPHP включает движок шаблонов Scaffold с нативной и компилируемой реализацией! 🎨

✔️TDD встроен в проект: При создании нового проекта с помощью стартера приложений, он включает PestPHP для тестирования с учетом разработки (TDD)! 🧪

✔️Другие функции: Двойные строители запросов, инжектор для инициализации, маршрутизатор и адаптеры для куков, сессий и кэш-хранилища.
🥱15👍42
Как написанный на Symfony Kbin покоряет Threadiverse

Здесь рассказывается о платформе, являющейся аналогом Reddit, написанной на Symfony - Kbin.

Помимо рассказа о преимуществах платформы автор поведал еще и о том что у неё под капотом, а именно:

✔️Symfony 6.1
✔️API Platform
✔️Schema Generator 3

и многое другое
3👍3
Это подробное сравнение трех различных технологических стеков, используемых для создания расширенных поисковых систем на основе движка Elasticsearch. Автор оценивает Symfony (PHP), Flask (Python) и Spring Boot (Java) по различным критериям, таким как удобство использования, настройка локальной среды, создание каркаса проекта, документация по API, интеграция с Elasticsearch, создание поискового сервиса и построителей запросов, ошибки отладки и скорость кодирования.

Результаты сравнения кратко представлены в таблице конце статьи

Статья намекает на продолжение, в котором, вероятно, будут рассмотрены аспекты производительности этих фреймворков.
👍4😁32
#дайджест #phpdevjob

Вакансии недели для Москвы 👨🏻‍🏫

PHP программист в iStudio
Москва. Сеть магазинов.
Подробнее

PHP-разработчик в Сервер в Аренду
Москва. Хостинг.
Подробнее

PHP-разработчик в Автомакон
Москва. Системный интегратор.
Подробнее

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

PHP-программист в Флюид-Лайн
Москва. Импорт и продажа арматуры для нефтегазовой, химической и других отраслей.
Подробнее

Понравились вакансии?
👍 — да
👎 — нет
🥱1911👍1😁1
Как относитесь к vim? Хотели ли изучить когда-то?
⬇️⬇️⬇️
🥱16🔥8🌚3
Laravel без файлов .env

🔎Автор столкнулся с проблемой определения конфигурации в Laravel при использовании Docker и других окружений.

🔧 Для решения этой проблемы он создал новый подход, основанный на создании базового класса Environment, который содержит все необходимые атрибуты для конфигурации.

🚀 Разработчики расширяют этот класс, заполняя информацию для своих конкретных окружений. Для локальной разработки и тестирования PHPUnit автор использует файл .env.php, который не требует специальных настроек и коммитится в систему контроля версий.

⚙️ Он также отключил использование пакета phpdotenv, что улучшило время выполнения автоматизированных тестов.

Новый подход позволил упростить настройку окружения для команды разработчиков и улучшил производительность тестирования.
🥱112🤔2
Что такое CQRS?

CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, который предлагает разделить операции записи и чтения данных в приложении на две отдельные ветки. Вместо того, чтобы использовать единый интерфейс для обеих операций, CQRS предлагает использовать различные модели данных для команд и запросов. Это позволяет оптимизировать каждую модель для конкретных задач и улучшить производительность приложения.

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

Несмотря на то, что CQRS может быть сложной архитектурой для начала использования, правильное применение может принести множество преимуществ.

Интересная статья на эту тему

#вопросы_с_собеседований
👍14