Библиотека пхпшника | 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
Сколько лет опыта по вашему должен иметь мидл?
🥱6👍3
EnumConcern

Это пакет, предназначенный для улучшения использования возможностей Enum с помощью набора удобных методов. Этот пакет включает файл Trait, который позволяет легко обрабатывать Enum.
🥱9👍4🌚21
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🔥2🌚1
Новые каналы по PHP🎉

Готовимся к собеседованиям по PHP и проверяем себя на практических задачках: «Библиотека программиста» запустила два канала специально для PHP-разработчиков и тех, кто хочет ими стать👨‍🏫

Подписывайтесь:
👉Библиотека собеса по PHP — тут мы готовимся к интервью
👉Библиотека задач по PHP — тут решаем задачи, проходим тесты и изучаем код
🥱5👍2
В PHP существуют функции parse_ini_string и parse_ini_file, которые используют встроенный парсер PHP для обработки INI-конфигурационных файлов. Этот парсер поддерживает наследование значений из системных переменных окружения и констант PHP, объявленных на момент парсинга текста. С версии PHP 8.3 добавлена поддержка синтаксиса значений по умолчанию для переменных окружения.

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

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

Подробнее
6
Делаем web сервер из старого Android смартфона, без root

Статья описывает процесс превращения старого Android-устройства (в данном случае Xiaomi Mi 4c) в полноценный веб-сервер с использованием программ Termux, Nginx, PHP-FPM и MariaDB. В ходе статьи автор показывает, как установить необходимые компоненты, настроить их взаимодействие и запустить WordPress на устройстве. Важным моментом является возможность управления сервером через SSH и SFTP, что делает процесс управления и разработки удобным.

вот основные шаги, если захотите повторить:

🟠Установка Termux, эмулятора терминала с минимальным Linux окружением, на Android-устройстве.

🟠Установка и настройка OpenSSH для удаленного доступа к устройству.

🟠Установка и настройка Nginx для обслуживания статических веб-страниц и настройка поддержки PHP-FPM для обработки динамических контентных страниц.

🟠Установка MariaDB для работы с базой данных WordPress.

🟠Запуск и настройка WordPress на Android-устройстве.
👍23😁8
В PHP существует мощный функционал, называемый поздним статическим связыванием (LSB), который позволяет дочерним классам использовать статические свойства и методы родительского класса через ключевое слово "static". Это предоставляет гибкость и динамичность в разработке программного обеспечения.

Здесь рассматривается пример использования позднего статического связывания в веб-приложении с базой данных. В данном примере есть базовый класс "Database", содержащий общие функции для работы с базой данных, и два подкласса "User" и "Product", представляющих объекты в приложении. Позднее статическое связывание позволяет им динамически формировать запросы к базе данных, что делает систему более гибкой и легкой в обслуживании.
🥱12👍7
Какая разница между MyISAM и InnoDB? В каких случаях и что лучше применять?

MyISAM и InnoDB - это два самых распространенных типа таблиц в MySQL. Отличия между ними заключаются в следующем:

1. Система хранения данных: MyISAM использует таблицы с фиксированной длиной строк, в то время как InnoDB использует таблицы с переменной длиной строк. Это означает, что MyISAM обычно быстрее при выполнении операций чтения, а InnoDB более эффективен при выполнении операций записи.

2. Транзакции и целостность данных: InnoDB поддерживает ACID-транзакции (Atomicity, Consistency, Isolation, Durability - Атомарность, Согласованность, Изолированность, Устойчивость). Это означает, что в случае сбоя данных, InnoDB может откатить все изменения, сохраняя целостность данных. MyISAM не поддерживает транзакции и не обеспечивает такую же уровень целостности данных.

3. Блокировка таблиц: MyISAM блокирует всю таблицу во время выполнения операции записи, в то время как InnoDB блокирует только строки, с которыми происходит операция. Это означает, что InnoDB обычно более подходит для многопользовательских приложений, где множество операций происходит одновременно.

4. Внешние ключи: InnoDB поддерживает внешние ключи (foreign keys), что облегчает поддержку связей между таблицами и обеспечивает целостность данных. MyISAM не поддерживает внешние ключи.

Итак, в каких случаях что лучше использовать:

- Если нагрузка на базу данных состоит главным образом из операций чтения, то MyISAM может быть предпочтительнее из-за его более высокой производительности.
- Если приложение требует поддержку транзакций (например, при обработке платежей или других критически важных операций), или имеется необходимость в внешних ключах для поддержания целостности данных, то InnoDB является более подходящим выбором.

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

#вопросы_с_собеседований
👍18🥱8
Шаблоны проектирования PHP: Active Record

Active Record - это шаблон проектирования, который включает в себя класс с методами сохранения данных и бизнес-логики. Однако он нарушает принцип единственной ответственности, так как класс сочетает в себе множество обязанностей. Для решения этой проблемы предлагается создать родительский класс, который реализует методы сохранения данных универсальным способом.
✔️Этот подход называется Layer Supertype.

🔎Приведен пример работы с Active Record. В данном примере создается класс Product, который содержит методы для работы с продуктами в базе данных SQLite. Класс имеет статическое свойство conn для хранения соединения с базой данных и переменную data для хранения данных продукта.

Класс Product содержит методы для выполнения различных операций с базой данных, таких как поиск продукта по ID, выборка всех продуктов с возможностью фильтрации, удаление продукта и сохранение (включая добавление и обновление).

Приведенный код также включает примеры тестирования методов:
🟠INSERT
🟠UPDATE
🟠выборка всех продуктов из базы данных.
🥱7👍5
Forwarded from Библиотека программиста | программирование, кодинг, разработка
👨‍🎓Подборка бесплатных инструментов, курсов и ресурсов для освоения SQL и баз данных

✏️ Полный курс по базам данных НИУ ВШЭ, СПБПУ и центра CS, который познакомит с методами структурированного хранения данных, основами SQL, принципами использования баз данных в приложениях и многим другим
✏️ SQLBolt — серия интерактивных уроков и упражнений для изучения SQL прямо в браузере
✏️ PostgreSQL Tutorial — исчерпывающее пособие по PostgreSQL
✏️ The Internals of PostgreSQL — полезный ресурс для изучения внутреннего устройства PostgreSQL
✏️ DB-Engines — коллекция полезной информации о реляционных СУБД и NoSQL
✏️ SQLZoo — подборка учебных пособий как для новичков, так и для профи
✏️ SQL Tutorial — видеогайд по SQL от FreeCodeCamp
✏️ PopSQL — инструмент для совместного изучения SQL и выполнения SQL-запросов
👍9🔥2
Совет по безопасности: увеличьте количество проходов bcrypt

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

Здесь рассматриваются изменения, внесенные в Laravel, включая увеличение количества проходов bcrypt с 10 до 12. Это увеличение замедляет процесс хеширования, обеспечивая более высокий уровень безопасности.
👍2
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👍2😁1
Использование Hashid с Laravel (вместо UUID)

Статья обсуждает различные методы создания идентификаторов в базах данных, сосредотачиваясь на сравнении увеличиваемых целочисленных идентификаторов с уникальными строковыми идентификаторами (UUIDs) и методом Hashid.

Автор исследует преимущества и недостатки каждого метода и предоставляет решение в виде использования Hashid - метода для генерации коротких и уникальных строковых идентификаторов из чисел.

В статье также рассматривается реализация Hashid в Laravel-приложении
👍4👾3🥱1
#дайджест #phpdevjob

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

PHP-разработчик в NeoFamily
Санкт-Петербург. Онлайн-школа по подготовке к ЕГЭ.
Подробнее

PHP-программист в ЛЕКО
Тверь. Разработка крупных интернет-проектов.
Подробнее

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

Junior PHP-программист в Скобеев и Партнеры
Тамбов. ИТ-услуги и эталонный сервис.
Подробнее

Программист PHP в ИНТАСК
Воронеж. Разработка ПО для электронной торговли.
Подробнее

Понравились вакансии?
👍 — да
👎 — нет
🥱8👍2
#хочу_спросить

Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
😁3👍2
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы

🐘PHP

Библиотека пхпшника
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Библиотека Data Science — полезные статьи, новости и обучающие материалы
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие профильные каналы

Библиотека фронтендера
Библиотека шарписта
Библиотека мобильного разработчика
Библиотека хакера
Библиотека devops’a
Библиотека тестировщика

💼Каналы с вакансиями

Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
Вакансии по DevOps & SRE
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook
🔸Instagram
🥱21👍1🌚1
Перевод сущностей в EasyAdmin с помощью DoctrineBehaviors

В данной статье рассматривается способ перевода сущностей в EasyAdmin. Создается сущность "Article", где можно перевести заголовок, слаг и содержание на несколько языков, а также добавить возможность фильтрации по переводимым полям.
👍3
Какие процессы происходят, когда пользователь вводит в браузере 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