PHP Profi

КвестКак хакнуть форму

Мы запустили квест по мотивам статьи взлома. Удачного вам прохождения.
Предварительные результаты
Попытались: 42
Прошли: 12
подробнее...

НовостиУстановка новой версии PHP 7.2

PHP 7.2

Недавно был релиз PHP 7.2, который привнёс несколько отличных новых фич и улучшений безопасности в язык. Например, таких, как указание типа object, разумное поведение count() и многое другое.

Здесь мы собрали краткие руководства о том, как установить PHP 7.2 на нескольких разных операционных системах:

2017-12-08 alek13

ПроектированиеНеймспейсы и организация сервисов бизнес-логики в Symfony

Я хочу поговорить о пространствах имен для сервисов в Symfony, специфичное для Symfony3.

Это захватывающие времена, Symfony 4 уже на подходе — выходит 30-го ноября — так что этот пост может стать неактуальным в ближайшее время! Тем не менее концепт всё тот же, так что давайте взглянем на него!

2017-11-29 alek13

Тонкости языкаЧего всё ещё не хватает в PHP: generics

РНР 7.2 не за горами, и эта версия принесёт нам такие изменения в типах, как возможность указать тип object в сигнатуре методов, или как расширение типа параметра.
Они подтверждают желание сообщества PHP укрепить систему типов в PHP и улучшить безопасность типов.

В Libcast (видеохостинг), мы ценим эти изменения, которые позволяют полагаться на IDE, которая отображает ошибки типов при вводе кода и проверяет типы во время компиляции, тем самым уменьшая время, необходимое для поиска и исправления ошибки.
Дженерики (Generics) - это фича, которая, как мы надеемся, скоро появятся в PHP и позволит создавать универсальные контейнеры указанного типа.

2017-11-28 irul

ПроектированиеЧто обеспечивает interface и для чего он нужен

Создание и внедрение интерфейсов в наш код — это важно. Это помогает с подменой компонентов, облегчает тестирование, отделяет "что" от "как".

Но просто влепить интерфейс к классу и забыть — этого недостаточно.

Мы также должны подумать о том, на что мы "натянем" этот интерфейс.

 

2017-11-27 alek13

ИнструментыЗапуск встроенного PHP веб-сервера из PHPUnit

Иногда в PHP нам нужно написать интеграционные тесты, и иногда для этих интеграционных тестов нужен веб-сервер. Встроенный веб-сервер доступен начиная с PHP 5.4 и для этих целей можно использовать его.

2017-11-24 alek13

ПакетыPHP GraphQL пакеты и интеграции с Symfony

GraphQL продолжает набирать обороты в 2017 году. Хотя он и не является заменой для REST, он обеспечивает пользователей контентных API и т. п. лучшей эргономикой, чем RESTful-интерфейсы общего назначения. Для PHP существуют две популярные библиотеки, и обе имеют бандлы для интеграции с Symfony.

Реализация GraphQL-совместимого сервера — не тривиальная задача, да и создавать с нуля свой собственный не рекомендуется (на любом языке). Для PHP на данный момент есть две библиотеки, которые предлагают прочную основу для построения реализаций GraphQL:

2017-11-23 alek13

Тонкости языкаЮнит тесты для трейтов в PHP7

Небольшая заметка как можно тестировать трейты в PHP 7. Простой и изящный способ, найденный на просторах.

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

2017-11-22 alek13

ПакетыWhoops! Наглядное отображение ошибок в PHP

Когда мы сталкиваемся с ошибками в PHP, каждый раз это, мягко говоря, тихий ужас. А если вы вспомните как вы в первый раз смотрели на это сообщение и пытались понять, что "от вас вообще хотят" и как это чудо читать и понимать, то вы точно со мной согласитесь. Не то чтобы эти сообщения об ошибках не информативны, — нет там достаточно информации, — но читать их практически невозможно. Ну как минимум очень неудобно, а как следствие — долго, что прямо влияет на скорость разработки. Конечно, если у вас стоит и настроен xDebug, это немного спасает ситуацию, но не особо.

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

И вот тут решить все эти проблемы нам поможет Whoops!

Что такое Whoops

2017-11-15 alek13

Базы данныхОптимизация MySQL: индексы, медленные запросы, конфигурация

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

Оптимизация конфигурации

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

2017-11-13 alek13

ИнструментыМгновенный ajax-поиск на Laravel и Vue

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

Пролог: официальный пакет для реальной работы

Если вам нужен аккуратный и хорошо поддерживаемый вариант поиска Eloquent-моделей, то Laravel предоставляет для этого официальный пакет. Laravel Scout является пакетом основанным на технике драйверов и реализующий полнотекстовый поиск по Eloquent-моделям. В настоящее время в качестве драйвера он поддерживает только Algolia, но вы можете легко использовать собственный драйвер поиска.

Приступая к работе

В результате должно получиться следующее: мы набираем что-то в поле ввода и отправляем на сервер AJAX-запрос с заданными ключевыми словами. На back-end-е мы получаем ключевые слова и достаём модели, которые соответствуют данному запросу.

Т.к. то, что мы хотим описать в статье - это не более чем демонстрация, то back-end и front-end будут достаточно простыми. Что мы действительно хотим здесь подчеркнуть - ключевые моменты и фичи, которые делают поиск более удобным.

2017-11-07 alek13

Базы данных[Квест] Как хакнуть форму? Sql инъекции.

Эта статья является статьёй-квестом. Мы желаем вам успехов в его прохождении. Итоги вашего прохождения будут опубликованы позже (следите за новостями в соц. сетях), а также всем прошедшим в дальнейшем будет выслан инвайт для регистрации на сайте.

Ставьте лайки, делитесь с друзьями и коллегами, репостите в соц.сетях.

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

В первой статье я хотел бы описать и разъяснить некоторые общие методы взлома одного из самых уязвимых частей сайта — форм. Я буду подробно останавливаться на том, как использовать эти методы и как предотвратить атаки, а также расскажу о тестировании безопасности.

2017-11-02 irul

ИнструментыКак связать Monolog и E.L.K.

E.L.K. — это отличный стек для хранения, управления и мониторинга логов. Monolog — это отличная PHP-библиотека для логирования. Давайте заставим их работать вместе.

2017-11-01 alek13

Тонкости языкаСравнение PHP 7.1 и 7.2 производительности (на Docker и Symfony Flex)

РНР 7.2 выйдет в ближайшее время и на самом деле он уже достиг статуса релиз-кандидата. Недавно я исследовал Symfony Flex с Docker-ом, и подумал, что неплохо бы сделать небольшой тест-драйв для сравнения различий в PHP 7.1 и 7.2(RC4) относительно производительности по нескольким критериям.

Как и PHP 7.1, версия 7.2 не обещает каких-либо значительных улучшений производительности. Но она идет с некоторыми улучшениями, такими, как хэширование пароля Argon2 и набором обновлений для большинства современных PHP-проектов. С помощью контейнеров, ставших нормой, переключение версий на хостинге стало простой операцией. Так что сравнить 7.1 и 7.2 не составит труда. Итак.

2017-10-29 alek13

ИнструментыВсё, что вы должны знать о переменных окружения в PHP

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

You can't leak what you don't store

Давайте подробнее взглянем на то:

  • как это работает?
  • действительно ли это хорошая идея?
  • как с ними работать в PHP?
  • и в заключение на некоторые рекомендации и распространенные ошибки, которых следует избегать – на те ловушки, на которые мы наткнулись в реальном мире!
2017-10-26 alek13

ИнструментыЖадная загрузка в Laravel: load() или with()?

Прим. пер.: Это небольшая заметка о работе методов ::with() и ::load() Laravel Eloquent-а, которую должен знать каждый разработчик, пишущий на Laravel. Тут ничего нового, но, как оказывается, не все об этом знают.

Сегодня, работая с одним из моих проектов (который написан на фреймворке laravel) я столкнулся с ситуацией, когда мне нужно для одной из моделей получить данные по другим моделям, связанные с этой. Так вот, для этого у меня есть два варианта, предоставляемых Laravel-ом, которые обычно называют жадной загрузкой:

Оба метода достигают тех же конечных результатов — жадной загрузки моделей в первую. На самом деле, они оба запускают одни и те же два запроса. Какой выбрать?

2017-10-23 alek13

АдминистрированиеОптимизация PHP-FPM: Используем ‘pm static’ для максимальной производительности

Давайте кратко рассмотрим, как лучше настроить PHP-FPM для высокой пропускной способности, низкой задержки и более стабильного использования процессора и памяти. В большинстве дефолтных настроек PHP-FPM есть строка с PM (process manager), установленным в dynamic, а также рекомендации по использованию ondemand, в том случае если вы столкнулись с проблемами доступной памяти. Однако, давайте взглянем в документацию на php.net и сравним оба варианта управления, а также сравним с моей любимой настройкой под высокую посещаемость... pm = static:

2017-10-19 alek13

ИнструментыКонтейнеризация PHP-Приложения с помощью Docker

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

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

Чтобы продемонстрировать процесс Docker-изации PHP-приложения, я буду рассматривать блог, изначально разработанный на фреймворке Laravel 5.4.

2017-08-18 alek13

ПроектированиеСобытийные микросервисы с использованием RabbitMQ

Использование правильных шаблонов/паттернов для общения между микросервисами может помочь масштабировать ваше приложение и решить наиболее распространенные системные проблемы. Мы начали с прямых HTTP-вызовов для всех взаимодействий, но решили перейти к событийной системе. Эта система изменила наше мышление о взаимодействии между службами, навязала масштабируемые паттерны и увеличила отказоустойчивость.

Мы перешли к использованию событий вместо традиционного HTTP-взаимодействия по нескольким причинам.

2017-04-20 alek13

ПроектированиеDDD в PHP: Value Object или Объект-Значение

Определение Мартина Фаулера:

Небольшой простой объект, как деньги или диапазон дат, равенство которых не основано на идентичности

Объект-Значение (Value Object) — это объект, который представляет собой понятие из предметной области. В DDD (Domain Driven Development — разработка на основе предметной области, или предметно-ориентированное программирование) важно то, что Value Object поддерживает и обогащает Единый Язык вашей Предметной Области. Это не только примитивы, которые представляют собой некоторые значения, — они являются полноправными гражданами Предметной Области, которые формируют поведение вашего приложения.

Хорошие примеры Value Object-ов, упомянутые у Мартина, — деньги и время. При создании ГИС-приложений вы можете прийти к такому Объекту-Значению, как  Location($lat, $long), который будет инкапсулировать широту/долготу и подобное. Вопрос, который вы, вероятно, захотите задать — почему это лучше, чем просто передать два float`а в массиве и называть это $location?

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

2017-04-16 alek13

Тонкости языкаСоздание строго типизированных массивов и коллекций с использованием value object

Одной из особенностей языка, анонсированной еще в PHP 5.6, было добавление синтаксиса ... — для обозначения того, что функция или метод принимает переменную длину аргументов.

Что-то я редко встречаю, чтобы это было совмещено с указанием типа, в частности, для создания типизированных массивов.

Например, мы можем создать класс Movie с методом для задания массива дат выхода, который принимает только DateTimeImmutable объекты:

class Movie {
  private $airdates = [];

  public function setAirDates(\DateTimeImmutable ...$airdates) {
    $this->airdates = $airdates;
  }

  public function getAirDates() {
    return $this->airdates;
  }
}
2017-04-13 alek13