Php Profi New Posts http://phpprofi.ru/ Mon, 20 Nov 2017 11:25:42 GMT ru-RU Whoops! Наглядное отображение ошибок в PHP http://phpprofi.ru/blogs/post/77 Wed, 15 Nov 2017 15:28:19 GMT alek13 Когда мы сталкиваемся с ошибками в PHP, каждый раз это, мягко говоря, тихий ужас. А если вы вспомните как вы в первый раз смотрели на это сообщение и пытались понять, что "от вас вообще хотят" и как это чудо читать и понимать, то вы точно со мной согласитесь. Не то чтобы эти сообщения об ошибках не информативны, — нет там достаточно информации, — но читать их практически невозможно. Ну как минимум очень неудобно, а как следствие — долго, что прямо влияет на скорость разработки. Конечно, если у вас стоит и настроен xDebug, это немного спасает ситуацию, но не особо.

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

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

Что такое Whoops

]]>
Оптимизация MySQL: индексы, медленные запросы, конфигурация http://phpprofi.ru/blogs/post/76 Mon, 13 Nov 2017 02:32:54 GMT alek13 MySQL по-прежнему является самой популярной в мире реляционной базой данных, но в то же время и наиболее не оптимизированной. Многие люди остаются с настройками по умолчанию, не "копая" глубже. В этой статье мы рассмотрим некоторые советы по оптимизации MySQL в сочетании с некоторыми новинками, которые вышли относительно недавно.

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

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

]]>
Мгновенный ajax-поиск на Laravel и Vue http://phpprofi.ru/blogs/post/75 Tue, 07 Nov 2017 01:47:09 GMT alek13 Мгновенный поиск является довольно популярной фичей на сайтах и в приложениях. В этом посте мы постараемся охватить ключевые моменты реализации поиска в реальном времени с такими функциями, как подавление "дребезга" или подсветка результатов.

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

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

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

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

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

]]>
[Квест] Как хакнуть форму? Sql инъекции. http://phpprofi.ru/blogs/post/35 Thu, 02 Nov 2017 15:11:41 GMT irul

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

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

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

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

]]>
Как связать Monolog и E.L.K. http://phpprofi.ru/blogs/post/74 Wed, 01 Nov 2017 05:51:00 GMT alek13 E.L.K. — это отличный стек для хранения, управления и мониторинга логов. Monolog — это отличная PHP-библиотека для логирования. Давайте заставим их работать вместе.

]]>
Сравнение PHP 7.1 и 7.2 производительности (на Docker и Symfony Flex) http://phpprofi.ru/blogs/post/73 Sun, 29 Oct 2017 23:49:54 GMT alek13 РНР 7.2 выйдет в ближайшее время и на самом деле он уже достиг статуса релиз-кандидата. Недавно я исследовал Symfony Flex с Docker-ом, и подумал, что неплохо бы сделать небольшой тест-драйв для сравнения различий в PHP 7.1 и 7.2(RC4) относительно производительности по нескольким критериям.

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

]]>
Всё, что вы должны знать о переменных окружения в PHP http://phpprofi.ru/blogs/post/72 Thu, 26 Oct 2017 17:00:27 GMT alek13 Переменные окружения, используемые в конфигурации, являются на сегодняшний день основным методом установки в приложении таких настроек, как учетные данные базы, API ключи, секретные ключи и всего, что является различным в зависимости от того, где развертывается приложение. Сейчас такие настройки попадают в код через окружение, вместо прямого прописывания в файлах конфигурации или, того хуже, хардкода прямо в коде.

You can't leak what you don't store

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

  • как это работает?
  • действительно ли это хорошая идея?
  • как с ними работать в PHP?
  • и в заключение на некоторые рекомендации и распространенные ошибки, которых следует избегать – на те ловушки, на которые мы наткнулись в реальном мире!
]]>
Жадная загрузка в Laravel: load() или with()? http://phpprofi.ru/blogs/post/71 Mon, 23 Oct 2017 12:19:44 GMT alek13 Прим. пер.: Это небольшая заметка о работе методов ::with() и ::load() Laravel Eloquent-а, которую должен знать каждый разработчик, пишущий на Laravel. Тут ничего нового, но, как оказывается, не все об этом знают.

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

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

]]>
Оптимизация PHP-FPM: Используем ‘pm static’ для максимальной производительности http://phpprofi.ru/blogs/post/70 Thu, 19 Oct 2017 04:50:18 GMT alek13 Давайте кратко рассмотрим, как лучше настроить PHP-FPM для высокой пропускной способности, низкой задержки и более стабильного использования процессора и памяти. В большинстве дефолтных настроек PHP-FPM есть строка с PM (process manager), установленным в dynamic, а также рекомендации по использованию ondemand, в том случае если вы столкнулись с проблемами доступной памяти. Однако, давайте взглянем в документацию на php.net и сравним оба варианта управления, а также сравним с моей любимой настройкой под высокую посещаемость... pm = static:

]]>
Контейнеризация PHP-Приложения с помощью Docker http://phpprofi.ru/blogs/post/67 Fri, 18 Aug 2017 03:45:40 GMT alek13 Среди многих проблем, при современной разработке программного обеспечения, существует проблема гарантированно одинакового исполнения ПО во всех окружениях.

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

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

]]>