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

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

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

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

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

Один из подходов, который может быть применен во время тестирования кода с внешними зависимостями, — это использование моков или заглушек (mocks или stubs).

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

#вопросы_с_собеседований
👍4
Как промежуточное ПО TrimStrings в Laravel может вызывать проблемы

Что такое TrimStrings Middleware и для чего оно нужно?


TrimStrings — это middleware в Laravel, которое автоматически удаляет пробелы в начале и в конце строк данных, поступающих в запросах. Например, если пользователь вводит в форму " [email protected] " с пробелами, middleware уберёт эти пробелы и передаст чистую строку «[email protected]». Это помогает избежать ошибок, вызванных лишними пробелами.

Что произошло?

При интеграции с бразильским платёжным провайдером возникла необходимость валидации данных о транзакциях, поступающих на сервер через POST-запрос. Для проверки подлинности данных выполняется хэширование строки с использованием алгоритма SHA256 и секретного ключа. Однако в процессе проверки некоторые корректные запросы отклонялись.

Анализ логов Nginx показал, что в параметре full_name от провайдера сохранялись конечные пробелы, которые на сервере обрезались TrimStrings middleware. Это приводило к несоответствию хэшей и отклонению запросов.

Как решить проблему?

Для предотвращения подобных ситуаций нужно отключить TrimStrings middleware для определённых маршрутов. В Laravel 8 для этого появился метод TrimStrings::skipWhen.
🔸Если вы используете валидацию с ->unique() в ларе, не забудьте игнорировать текущую запись в форме редактирования.

В противном случае у вас возникнет ошибка валидации «Поле уже занято» в форме редактирования.
🥱8🤔7👾4👍1
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

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

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
🎉1
Действительно ли класс DateTime в PHP настолько плох?

Здесь мы рассмотрим плюсы и минусы класса DateTime, важность неизменяемости и то, как эффективно использовать класс DateTime, проанализируем причины и последствия, стоящие за этими проблемами.
🎉2👍1
#дайджест #phpdevjob

Вакансии PHP разработчиков уровня Junior

▪️PHP разработчик
Удаленка. Social Media Holding — технологические IT- проекты
Подробнее

▪️Веб-программист
Санкт-Петербург. Информатика и Сервис — системный интегратор и разработчик
Подробнее

Вакансии PHP разработчиков уровня Middle

▪️PHP Разработчик
Удаленка. Digital Services — разработка проектов в области кибербезопасности
Подробнее

▪️PHP Developer
Удаленка. Максимал — разработка сайтов любой сложности
Подробнее

Вакансии PHP разработчиков уровня Senior

▪️Backend-разработчик
Москва. Present&Simple — бренд женской одежды
Подробнее

▪️PHP-разработчик
Удаленка. Fix Price. IT — международная торговая розничная сеть
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
5👍1🤔1
В чем разница между методами dd() и dump()?

В Laravel методы dd() и dump() используются для вывода отладочной информации, но между ними есть некоторые различия:

Метод dd() (Dump and Die):

dd() расшифровывается как «Dump and Die».
Он выводит отладочную информацию и сразу завершает выполнение скрипта. Это удобно, когда нужно быстро остановить выполнение программы и просмотреть значения переменных или других данных.
Пример использования:

$data = [1, 2, 3];
dd($data);
// Выведет содержимое переменной $data и остановит выполнение скрипта.


Метод dump():

dump() просто выводит отладочную информацию, но не останавливает выполнение скрипта. Это полезно, когда нужно просмотреть данные на разных этапах выполнения программы, не прерывая её работу.
Пример использования:

$data = [1, 2, 3];
dump($data);
// Выведет содержимое переменной $data, но скрипт продолжит выполнение.


Таким образом, основное отличие заключается в том, что dd() завершает выполнение программы, а dump() — нет.

#вопросы_с_собеседований
👍6😁5
CSV и PHP8.4+

Здесь обсуждаются изменения в PHP 8.4, касающиеся обработки CSV-файлов, и их влияние на разработчиков и библиотеку league/csv, которая является популярным инструментом для работы с CSV в PHP.

В новой версии PHP 8.4 будут введены новые функции, такие как асимметричная видимость и хуки для свойств, но также будут изменения в старых функциональностях, в частности, в обработке CSV.

Разработчикам рекомендуется обновить свой код, чтобы использовать пустую строку для параметра экранирования и избежать предупреждений о депрекации. В статье приводятся примеры кода с пояснениями, как это сделать.
👍6🎉3🔥1👏1
Yaml — король мета-описаний

На Хабре уже опубликовано несколько статей о Yaml, однако они выглядят однобоко и не раскрывают его истинную природу. В этой статье будет сделана попытка исправить этот недостаток, рассказав о Yaml в положительном контексте. Детальное описание синтаксиса стандартного Yaml здесь приводиться не будет, так как в Интернете и на самом Хабре имеется множество материалов на эту тему, ссылки на которые также можно найти в данной статье. Материал предназначен для тех, кто уже знаком с Yaml, но, возможно, испытывает к нему неприязнь.
🥱2👍1
Привет, друзья! 👋

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

Не стесняйтесь делиться своими историями и лайфхаками в комментариях! 💬 Ваш опыт может помочь другим разработчикам справиться с прокрастинацией. Спасибо за участие!
👍3
Топ-5 стратегий кэширования

➡️ Реальное использование:

🔹 Cache Aside + Write Through: обеспечивает согласованную синхронизацию кэша/БД, позволяя при этом осуществлять контроль заполнения кэша во время чтения. Немедленные записи в базу данных могут нагружать БД.
🔹 Read Through + Write Back: абстрагирует БД и хорошо справляется с потоком трафика записи, задерживая синхронизацию. Однако это сопряжено с риском большей потери данных, если кэш выйдет из строя до синхронизации буферизованных записей с базой данных.

👉 Источник
👍6
#дайджест новостей по PHP за неделю:

🔎Стратегии предварительной выборки активов с Vite в Laravel 11.21 — На этой неделе команда Laravel выпустила версию 11.21, которая включает стратегии предварительной выборки активов для Vite, удобный метод принудительного уничтожения моделей с мягким удалением, обновления помощников для тестирования и многое другое.

🔎Symfony 7.1 с новыми возможностями

🔎PHP 8.4.0 Beta 3 теперь доступен для тестирования — Команда PHP рада сообщить о выходе PHP 8.4.0, Beta 3. Это первая бета-версия, продолжающая цикл выпуска PHP 8.4, примерный план которого указан в PHP Wiki.

🔎Неделя Symfony #921 (19-25 августа 2024 года) — На этой неделе в грядущей версии Symfony 7.2 была добавлена возможность рендеринга блока Twig с атрибутом Template, улучшен Serializer с конвертером имен из змеиного регистра в верблюжий, а также добавлена поддержка новых операторов в компоненте ExpressionLanguage.
👍42
Эта статья посвящена потенциальным уязвимостям, связанным с использованием слабого сравнения (==) в PHP. В отличие от строгого сравнения (===), слабое сравнение не учитывает типы данных и может привести к непредсказуемым результатам, что делает код уязвимым для атак.

PHP Loose Comparison (Слабое сравнение в PHP)

Слабое сравнение происходит, когда два значения сравниваются оператором ==, который не проверяет типы данных. PHP пытается привести сравниваемые значения к общему типу перед сравнением, что может приводить к неожиданным результатам. Например, строка 'string' при сравнении с true будет считаться эквивалентной true.

Уязвимые сценарии

Автор приводит два примера, где слабое сравнение может стать причиной серьезных проблем:

✔️Небезопасная система авторизации:

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

✔️Небезопасная авторизация с использованием switch:

В этом примере хакер может получить доступ к привилегиям администратора, просто подставив true в качестве значения $_POST['user_role'], так как switch-case также использует слабое сравнение.

Смягчение уязвимостей

Чтобы избежать таких проблем, рекомендуется использовать строгое сравнение (===), которое проверяет и значение, и тип данных. Также, начиная с PHP 8.0, можно использовать конструкцию match, которая работает как switch, но использует строгое сравнение, что делает код более безопасным.
👍15😁7🔥21🌚1
Топ модулей для распознавания рекапчи на Python, Node js и PHP

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

Был проведен анализ рынка модулей для распознавания капчи, и на основе этого составлен субъективный топ модулей для трех популярных языков программирования.
👍5
Как хранить координаты точки на карте в БД?

Рассмотрим несколько возможных подходов:

1. Хранение отдельных полей с широтой и долготой:
- Создайте две числовые колонки в таблице БД, например, «latitude» и «longitude», представляющие широту и долготу соответственно.
- Для каждой точки, сохраните ее координаты в эти поля.
- При поиске точек на карте, вы можете использовать операторы сравнения или функции, поддерживаемые БД, для поиска точек в определенном радиусе или в пределах определенной географической области.

2. Использование географических типов данных:
- Некоторые реляционные БД, такие как MySQL с расширением Spatial, PostgreSQL с расширением PostGIS или SQLite с поддержкой расширения SpatiaLite, предоставляют специальные типы данных для работы с географическими объектами.
- Создайте колонку с типом данных для хранения географической информации, например, тип «Point», который позволяет хранить точку с заданными координатами.
- Сохраняйте информацию о точках на карте в этой колонке.
- Используйте функции и операторы, поддерживаемые соответствующим расширением БД, для выполнения географических запросов, таких как поиск точек в определенном радиусе или внутри границ определенного полигона.

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