📶 Паттерны коммуникации в распределенных системах
Распределенные системы состоят из многих отдельных частей/узлов, работающих вместе, но физически расположенных в разных местах. Эти части системы должны общаться друг с другом через сеть, чтобы система могла функционировать как единое целое.
Хотя коммуникация критически важна, правильно ее организовать бывает непросто: разработчики иногда пытаются использовать один и тот же подход ко всем задачам коммуникации, что может быть неэффективно. Важно понимать, что существуют разные способы организации коммуникации, и выбор правильного метода зависит от конкретной задачи. Рассмотрим основные паттерны коммуникации, которые можно использовать для решения разных задач.
☑️ Запрос-ответ с HTTP
Этот синхронный паттерн коммуникации предполагает, что один сервис отправляет запрос другому сервису и ожидает ответа или ошибки, блокируя свою работу до получения результата. REST, наиболее популярный архитектурный стиль для этой модели коммуникации, использует методы протокола HTTP — GET, POST, PUT и DELETE.
Однако использование этого паттерна может привести к проблемам, если сервисы образуют цепочку взаимодействий: в таком случае сбой одного из сервисов может привести к отказу всей операции, а также к расточительному использованию ресурсов и каскадным сбоям.
☑️ Общие данные
Этот паттерн часто остается незамеченным, поскольку разработчики не всегда воспринимают его как модель коммуникации. В рамках этого подхода один компонент записывает данные в определенное место, а другой компонент считывает и обрабатывает эти данные. Например, один сервис может загрузить файл в облачное объектное хранилище (например, в корзину Amazon S3), а другой сервис затем извлекает этот файл для дальнейших действий.
Главное преимущество этого паттерна — простота реализации и возможность обеспечения взаимодействия между устаревшими и современными системами без проблем совместимости. Однако он не подходит для сценариев, требующих низкой задержки.
☑️ Асинхронный запрос-ответ
В отличие от синхронного подхода, запрос-ответ может быть реализован асинхронно и без блокировки. В этом случае получающий сервис должен явно знать место назначения для отправки ответа. Для реализации этого паттерна идеально подходят очереди сообщений, которые позволяют буферизовать несколько запросов.
Основная сложность здесь — корреляция между запросом и ответом: экземпляр сервиса, отправивший запрос, может отличаться от экземпляра, получающего ответ, поэтому требуется способ отслеживания запросов.
☑️ Коммуникация на основе событий
В этом подходе сервисы не общаются напрямую друг с другом, а генерируют события, которые могут быть использованы другими сервисами. Это требует наличия места для отправки данных о событиях и механизма, позволяющего получающим сервисам обнаруживать эти события. Брокеры сообщений, такие как RabbitMQ, могут обрабатывать оба этих аспекта. Издатели используют API для отправки событий в брокер, который управляет подписками и уведомляет подписчиков при поступлении события.
Этот паттерн идеально подходит для создания слабосвязанных взаимодействий между сервисами. Однако брокер сообщений должен обеспечивать надежную доставку событий, их упорядочивание и согласованность. Кроме того, добавляется дополнительный компонент в систему.
👨💻 Подробнее читайте в статье.
Распределенные системы состоят из многих отдельных частей/узлов, работающих вместе, но физически расположенных в разных местах. Эти части системы должны общаться друг с другом через сеть, чтобы система могла функционировать как единое целое.
Хотя коммуникация критически важна, правильно ее организовать бывает непросто: разработчики иногда пытаются использовать один и тот же подход ко всем задачам коммуникации, что может быть неэффективно. Важно понимать, что существуют разные способы организации коммуникации, и выбор правильного метода зависит от конкретной задачи. Рассмотрим основные паттерны коммуникации, которые можно использовать для решения разных задач.
☑️ Запрос-ответ с HTTP
Этот синхронный паттерн коммуникации предполагает, что один сервис отправляет запрос другому сервису и ожидает ответа или ошибки, блокируя свою работу до получения результата. REST, наиболее популярный архитектурный стиль для этой модели коммуникации, использует методы протокола HTTP — GET, POST, PUT и DELETE.
Однако использование этого паттерна может привести к проблемам, если сервисы образуют цепочку взаимодействий: в таком случае сбой одного из сервисов может привести к отказу всей операции, а также к расточительному использованию ресурсов и каскадным сбоям.
☑️ Общие данные
Этот паттерн часто остается незамеченным, поскольку разработчики не всегда воспринимают его как модель коммуникации. В рамках этого подхода один компонент записывает данные в определенное место, а другой компонент считывает и обрабатывает эти данные. Например, один сервис может загрузить файл в облачное объектное хранилище (например, в корзину Amazon S3), а другой сервис затем извлекает этот файл для дальнейших действий.
Главное преимущество этого паттерна — простота реализации и возможность обеспечения взаимодействия между устаревшими и современными системами без проблем совместимости. Однако он не подходит для сценариев, требующих низкой задержки.
☑️ Асинхронный запрос-ответ
В отличие от синхронного подхода, запрос-ответ может быть реализован асинхронно и без блокировки. В этом случае получающий сервис должен явно знать место назначения для отправки ответа. Для реализации этого паттерна идеально подходят очереди сообщений, которые позволяют буферизовать несколько запросов.
Основная сложность здесь — корреляция между запросом и ответом: экземпляр сервиса, отправивший запрос, может отличаться от экземпляра, получающего ответ, поэтому требуется способ отслеживания запросов.
☑️ Коммуникация на основе событий
В этом подходе сервисы не общаются напрямую друг с другом, а генерируют события, которые могут быть использованы другими сервисами. Это требует наличия места для отправки данных о событиях и механизма, позволяющего получающим сервисам обнаруживать эти события. Брокеры сообщений, такие как RabbitMQ, могут обрабатывать оба этих аспекта. Издатели используют API для отправки событий в брокер, который управляет подписками и уведомляет подписчиков при поступлении события.
Этот паттерн идеально подходит для создания слабосвязанных взаимодействий между сервисами. Однако брокер сообщений должен обеспечивать надежную доставку событий, их упорядочивание и согласованность. Кроме того, добавляется дополнительный компонент в систему.
👨💻 Подробнее читайте в статье.
👍7❤1🥰1😁1
🛠️ 7 инструментов для повышения производительности веб-приложений
Скорость загрузки веб-приложений критична для пользовательского опыта. В этой статье мы расскажем о семи инструментах, которые помогут сделать ваши приложения более быстрыми и отзывчивыми.
👉 Читать статью
👉 Зеркало
Скорость загрузки веб-приложений критична для пользовательского опыта. В этой статье мы расскажем о семи инструментах, которые помогут сделать ваши приложения более быстрыми и отзывчивыми.
👉 Читать статью
👉 Зеркало
😁10👍1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🍉 Подборка лучших статей «Библиотеки программиста» за август: сохраняй в заметки, чтобы не пропустить #самыйсок
🎮🚀 Saturated Outer Space: как инди-разработчики перезапускают игру и бросают вызов жанровым стереотипам
🤖🛠 Секреты эффективного промптинга: 4 способа улучшить качество ответов чат-бота
🎮 Как зарабатывать на играх или зачем изучать игровую аналитику в 2024 году
🏄 6+ главных алгоритмов балансировки нагрузки
🖼 5 стратегий рендеринга веб-страниц: как выжать максимум из вашего сайта
🚀 Ускорьте свою базу данных: 7 проверенных методов масштабирования и оптимизации
🐘🧠 Оптимизация использования памяти в PostgreSQL: секреты профессионалов
🏃 Самоучитель по Go для начинающих. Часть 15. Конкурентность. Горутины. Каналы
🆕📜 Что нового в TypeScript 5.5: 4 ключевых улучшения
🎮📖 Библиотека геймдизайнера: 10 must-read книг 2024 года
🤖 6 основных алгоритмов машинного обучения: руководство для начинающих
🏗 Структуры данных для разработчиков: 10 самых важных
🎮🚀 Saturated Outer Space: как инди-разработчики перезапускают игру и бросают вызов жанровым стереотипам
🤖🛠 Секреты эффективного промптинга: 4 способа улучшить качество ответов чат-бота
🎮 Как зарабатывать на играх или зачем изучать игровую аналитику в 2024 году
🏄 6+ главных алгоритмов балансировки нагрузки
🖼 5 стратегий рендеринга веб-страниц: как выжать максимум из вашего сайта
🚀 Ускорьте свою базу данных: 7 проверенных методов масштабирования и оптимизации
🐘🧠 Оптимизация использования памяти в PostgreSQL: секреты профессионалов
🏃 Самоучитель по Go для начинающих. Часть 15. Конкурентность. Горутины. Каналы
🆕📜 Что нового в TypeScript 5.5: 4 ключевых улучшения
🎮📖 Библиотека геймдизайнера: 10 must-read книг 2024 года
🤖 6 основных алгоритмов машинного обучения: руководство для начинающих
🏗 Структуры данных для разработчиков: 10 самых важных
👍2❤1🔥1
Как программно перевести контент
В этой статье показано, как программно переводить содержимое с помощью PHP, используя библиотеку TransformersPHP.
В этой статье показано, как программно переводить содержимое с помощью PHP, используя библиотеку TransformersPHP.
DEV Community
How to translate content programmatically using AI and TransformersPHP
In this article, I'll show you how to translate content programmatically with PHP using the...
❤4👍1
Расскажите про функции Closure::bindTo и Closure::bind
Closure::bindTo и Closure::bind — это методы в PHP, которые позволяют изменять контекст для замыканий (closures). Они предоставляют возможность явно привязать замыкание к определенному объекту или классу.
Closure::bindTo:
Closure::bindTo используется для создания нового замыкания, связанного с указанным объектом. Этот метод возвращает новый объект замыкания с измененным контекстом.
Closure::bind:
Closure::bind также позволяет изменять контекст замыкания, но вместо создания нового замыкания, этот метод изменяет контекст существующего замыкания. Это статическая версия метода bindTo
#вопросы_с_собеседований
Closure::bindTo и Closure::bind — это методы в PHP, которые позволяют изменять контекст для замыканий (closures). Они предоставляют возможность явно привязать замыкание к определенному объекту или классу.
Closure::bindTo:
Closure::bindTo используется для создания нового замыкания, связанного с указанным объектом. Этот метод возвращает новый объект замыкания с измененным контекстом.
Closure::bind:
Closure::bind также позволяет изменять контекст замыкания, но вместо создания нового замыкания, этот метод изменяет контекст существующего замыкания. Это статическая версия метода bindTo
#вопросы_с_собеседований
👍6🌚2👾2
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
👍1
Работа с большими JSON-файлами и расширение класса Request
В этой статье используется подход, который увеличивает лимит памяти, когда целевыми являются определенные маршруты, и он, скорее всего, подходит для приложений с несколькими маршрутами, которые должны обрабатывать большие файлы с максимальным размером 50 МБ (грубо говоря) или меньше.
В этой статье используется подход, который увеличивает лимит памяти, когда целевыми являются определенные маршруты, и он, скорее всего, подходит для приложений с несколькими маршрутами, которые должны обрабатывать большие файлы с максимальным размером 50 МБ (грубо говоря) или меньше.
Geoligard
Handling large JSON payloads and extending the Request class
See how to easily modify and override methods found in the framework's Request class in order to handle specific routes with sizeable payloads.
🥱1
Надеемся, что все отлично отпраздновали день программиста. А нам за два дня пришло много ответов на нашу задачу.
У нас есть победитель, он выбран рандомно среди правильных ответов:
erdnya — аккаунт закрытый. Свяжитесь с @mdudarevcontact
Мы с ним свяжемся и дадим доступ к любому из следующих курсов
Курсы на выбор:
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое TransformersPHP?
Это PHP-пакет, позволяющий запускать предварительно обученные модели из HuggingFace прямо в PHP — не требуется ни API, ни дополнительного сервера.
Пакет разработан как функционально эквивалентный популярной библиотеке Python Transformers. Поэтому его легко начать использовать, если вы знакомы с ML.
Вот несколько примеров использования:
🔸Создание инструмента для удаления фона с помощью Laravel и TransformersPHP.
🔸Как программно переводить контент с помощью AI и TransformersPHP.
🔸Как автоматически генерировать Alt-текст изображения с помощью AI и Transformers PHP.
🔸Машинное обучение с помощью PHP.
Под капотом используется ONNX Runtime и Math libray Rindow через FFI. И самое приятное, что он делает все за вас, даже загружает все либы в соответствии с вашей ОС с помощью небольшого плагина Composer: CodeWithKyrian/transformers-libsloader.
Это PHP-пакет, позволяющий запускать предварительно обученные модели из HuggingFace прямо в PHP — не требуется ни API, ни дополнительного сервера.
Пакет разработан как функционально эквивалентный популярной библиотеке Python Transformers. Поэтому его легко начать использовать, если вы знакомы с ML.
Вот несколько примеров использования:
🔸Создание инструмента для удаления фона с помощью Laravel и TransformersPHP.
🔸Как программно переводить контент с помощью AI и TransformersPHP.
🔸Как автоматически генерировать Alt-текст изображения с помощью AI и Transformers PHP.
🔸Машинное обучение с помощью PHP.
Под капотом используется ONNX Runtime и Math libray Rindow через FFI. И самое приятное, что он делает все за вас, даже загружает все либы в соответствии с вашей ОС с помощью небольшого плагина Composer: CodeWithKyrian/transformers-libsloader.
👍4🌚1
Forwarded from PHP jobs — вакансии по PHP, Symfony, Laravel
#дайджест #phpdevjob
Вакансии PHP разработчиков уровня Junior
▪️Backend разработчик
Краснодар. ИнТОП — разработка сайтов, порталов, приложений, виджетов
Подробнее
▪️PHP-программист
Удаленка. ЛЕКО — разработка крупных интернет-проектов
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️PHP-разработчик
Удаленка. ТЕХНЕЗИС — разработка ПО для транспорта
Подробнее
▪️Веб-программист PHP
Удаленка. SmartSites — агентство диджитал-маркетинга
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️Разработчик парсеров на PHP
Удаленка. Alef — нейросетевой обработчик отзывов на маркетплейсах
Подробнее
▪️PHP Developer
Удаленка. КВАДО.РУ — продуктовая IT-компания
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
Вакансии PHP разработчиков уровня Junior
▪️Backend разработчик
Краснодар. ИнТОП — разработка сайтов, порталов, приложений, виджетов
Подробнее
▪️PHP-программист
Удаленка. ЛЕКО — разработка крупных интернет-проектов
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️PHP-разработчик
Удаленка. ТЕХНЕЗИС — разработка ПО для транспорта
Подробнее
▪️Веб-программист PHP
Удаленка. SmartSites — агентство диджитал-маркетинга
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️Разработчик парсеров на PHP
Удаленка. Alef — нейросетевой обработчик отзывов на маркетплейсах
Подробнее
▪️PHP Developer
Удаленка. КВАДО.РУ — продуктовая IT-компания
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
krasnodar.hh.ru
Вакансия PHP Junior backend разработчик / программист в Краснодаре, работа в компании Агентство ИнТОП (вакансия в архиве c 13 октября…
Зарплата: от 40000 до 90000 ₽ за месяц. Краснодар. Требуемый опыт: не требуется. Полная занятость. Дата публикации: 10.10.2024.
😁3👍2🔥2
#хочу_спросить
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
👍1
CipherSweet
Это библиотека, разработанная компанией Paragon Initiative Enterprises для реализации шифрования на уровне полей с возможностью поиска.
Это библиотека, разработанная компанией Paragon Initiative Enterprises для реализации шифрования на уровне полей с возможностью поиска.
GitHub
GitHub - paragonie/ciphersweet: Fast, searchable field-level encryption for PHP projects
Fast, searchable field-level encryption for PHP projects - paragonie/ciphersweet
Какие строковые функции вы знаете?
echo() — Выводит одну или несколько строк
explode() — Разбить строку на массив
ltrim() — Удаляет лишние символы или пробелы с левой стороны строки.
parse_str() — Разбирает строку запроса на переменные
str_replace() — Заменяет указанные символы строки
str_split() — Разбивает строку на массив символов
str_word_count() — Количество слов в строке
strlen() — Вычисляет длину строки
strncmp() — Сравнивает первые несколько символов строки
Остальные функции можно посмотреть в документации.
echo() — Выводит одну или несколько строк
explode() — Разбить строку на массив
ltrim() — Удаляет лишние символы или пробелы с левой стороны строки.
parse_str() — Разбирает строку запроса на переменные
str_replace() — Заменяет указанные символы строки
str_split() — Разбивает строку на массив символов
str_word_count() — Количество слов в строке
strlen() — Вычисляет длину строки
strncmp() — Сравнивает первые несколько символов строки
Остальные функции можно посмотреть в документации.
😁11🌚1