Перестаньте изобретать изобретенное: 8 полезных PHP библиотек, которые заменят ваши велосипеды

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

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

Imanee

Пожалуйста, хватит писать свои функции для работы с графикой!

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

Чтобы окончательно убедить вас не писать что-то своё, приведем несколько примеров.

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

echo Imanee::globAnimate('resources/*.jpg');

То же самое касается и установки на изображение своего копирайта:

$imanee->placeText('imanee test', 40, Imanee::IM_POS_MID_CENTER)->output();

Официальный GitHub репозиторий: Imanee

Сайт с документацией и котиком: Imanee.io

PHP Benchmark

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

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

Подключив PHP Benchmark и прописав в нужных местах следующую строчку:

\PHPBenchmark\Monitor::instance()->snapshot('Plugins loaded');

можно получить детальный отчет по работе приложения.

Вот пример для популярной платформы WordPress:
687474703a2f2f766963746f726a6f6e73736f6e2e6769746875622e636f6d2f5048502d42656e63686d61726b2f73632d322e706e67

Подробную документацию, как и исходники, вы можете найти на гитхабе: PHP-Benchmark

RegExp Builder

Являясь бесплатным портом известной JavaScript библиотеки, PHP RegExp Builder позволяет полностью забыть о регулярках, их синтаксисе и искусстве написания. С использованием этого инструмента валидацию, поиск и замену сложных по структуре данных — основные области применения регулярных выражений — стало делать ещё проще.

Выражения, созданные в Builder’е, легко читать и изменять — всё состоит из так называемых «цепочек».

Пример создания регулярного выражения с RegExp Builder:

$regExp = $builder
->startOfInput()
->exactly(4)->digits()
->then("_")
->exactly(2)->digits()
->then("_")
->min(3)->max(10)->letters()
->then(".")
->anyOf(array("png", "jpg", "gif"))
->endOfInput()
->getRegExp();

Скачать библиотеку можно на GitHub: RegExp Builder

Там же доступна и документация: RegExp Builder Wiki

PHP FaceDetection

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

PHP FaceDetection — это серверная адаптация одноименного JS-фреймворка от Котика Тхеравада, с помощью которой, написав всего пару строчек, вы получите координаты лица на изображении в удобном формате.

Пример:

$face_detect->face_detect('sample-image3.jpg');

face-detect-sample (1)

Ссылка на GitHub: PHP FaceDetection

Mobile Detect

Mobile Detect — легковесный класс с открытым исходным кодом, предназначенный для определения модели мобильного устройства клиента. Для «детекта» он использует User-Agent в сочетании с HTTP заголовками и свою обширную базу данных — это делает количество ложных срабатываний минимальным.

Даже несмотря на то, что для адаптивного дизайна сегодня используются Media Queries, скрипт всё равно может быть полезен: например, вы можете отдавать мобильным пользователям более легковесные изображения, тем самым ускоряя загрузку сайта.

Простейший пример:

if ( $detect->isMobile() ) {
// пользователь зашел с телефона!
}

Рабочее демо: demo.mobiledetect.net

Документация и ссылка на скачивание: mobiledetect.net

ABLincoln

ABLinkoln — написанная на PHP реализация фреймворка PlanOut от Facebook, предназначенного для A/B тестов — тестов, использующихся для оценки эффективности веб-страницы и повышения конверсии, или, другими словами, сплит-тестирования.

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

Например, чтобы поставить эксперимент с двумя видами надписи и цвета кнопки, нужно создать вот такой простой класс:

use \Vimeo\ABLincoln\Experiments\SimpleExperiment;
use \Vimeo\ABLincoln\Operators\Random as Random;

class MyExperiment extends SimpleExperiment
{
   public function assign($params, $inputs)
   {
       $params->button_color = new Random\UniformChoice(
           ['choices' => ['#ff0000', '#00ff00']],
           $inputs
       );
       $params->button_text = new Random\WeightedChoice(
           [
               'choices' => ['Join now!', 'Sign up.'],
               'weights' => 1
           ],
           $inputs
       );
   }
}

Документация, исходники и примеры кода — на GitHub.

phpQuery

Задача спарсить некую информацию со стороннего сайта встает перед веб-разработчиком очень часто: таким образом можно заполнить контентом собственный сайт, динамически подгрузить какую-то информацию и многое другое.

Ранее мы уже делали подборку лучших инструментов для парсинга веб-страниц средствами PHP. Согласно результатам того исследования, наиболее универсальной оказалась библиотека phpQuery.

Это, по сути, PHP вариант jQuery, обладающий почти всем, что есть в оригинале. Помимо удобства использования, phpQuery еще и гораздо быстрее своих конкурентов, а значит, лучше всего подойдет для работы с большим объемом данных.

Вот небольшой пример использования phpQuery для обработки элементов списка (li):

foreach(pq('li') as $li) {

       // Можно вывести различные данные обычным текстом

       $tagName = $li->tagName;

       $childNodes = $li->childNodes;

       // А можно добавить обертку phpQuery (аналог $() в JQuery) и, например, добавить к элементу какой-то класс

       pq($li)->addClass('my-second-new-class');

}

Библиотека и документация к ней доступны на официальной странице в Google Code.

mPDF

mPDF — одна из лучших библиотек для генерации документов в формате PDF. В отличие от своих конкурентов, mPDF в полной мере поддерживает русский язык, вставку картинок, форматирование и, самое главное, HTML и CSS.

Основанный на открытом движке инструмент очень прост в использовании: на вход вы подаете почти обычную веб-страницу — на выходе получаете полноценный PDF.

$html = '<table border="1">
   <tr>
       <td>Пример 1</td>
       <td>Пример 2</td>
       <td>Пример 3</td>
       <td>Пример 4</td>
   </tr>
   <tr>
       <td>Пример 5</td>
       <td>Пример 6</td>
       <td>Пример 7</td>
       <td>
           <a href="http://mpdf.bpm1.com/" title="mPDF">mPDF</a>
       </td>
   </tr>
</table>';


// Задаем формат, отступы и т.д
$mpdf = new mPDF('utf-8', 'A4', '8', '', 10, 10, 7, 7, 10, 10);

// Не забываем про русский
$mpdf->charset_in = 'cp1251';

// Подключаем css
$stylesheet = file_get_contents('style.css');

$mpdf->WriteHTML($stylesheet, 1);

$mpdf->list_indent_first_level = 0;

// Формируем pdf
$mpdf->WriteHTML($html, 2);

$mpdf->Output('mpdf.pdf', 'I');

?>

Более подробную документацию, пример кода и ссылку на скачивание вы найдете на официальном сайте: mpdf1.com

  1. 3, 0.7