23 замечательных PHP-библиотеки, о которых вам стоит знать
Сейчас очень хорошее время для того, чтобы быть PHP-разработчиком. Есть множество библиотек, которые выходят чуть ли не каждый день, а такие ресурсы, как Composer и Github помогают нам легко их найти и начать использовать.
Ниже вы найдете 23 классных библиотеки, о которых я хочу вам рассказать.
1. Dispatch — Микро-фреймворк
Dispatch — это минималистичный PHP-фреймворк. Он не дает вам полноценной MVC-структуры, но вы можете назначить правила и методы обработки URL-адресов чтобы лучше организовать ваше приложение. Это удобно для API, простых сайтов и прототипов:
// Подключаем библиотеку include 'dispatch.php'; // назначаем свои правила маршрутизации get('/greet', function () { // отрисовка вида render('greet-form'); }); // post-обработчик post('/greet', function () { $name = from($_POST, 'name'); // отрисовка вида с передачей переменных render('greet-show', array('name' => $name)); }); dispatch();
Вы сможете настроить определенные типы HTTP-запросов и пути, отрисовывать виды и др. Если вы объедините Dispatch с другим фреймвороком, то получите действительно мощный и легкий инструмент.
2. Klein — молниеносный роутер для PHP
Klein — еще одна легковесная библиотека маршрутизации для PHP 5.3+. У нее чуть более многословный синтаксис по сравнению с Dispatch, однако она также очень быстра. Вот пример:
respond('/[:name]', function ($request) { echo 'Hello ' . $request->name; });
Вы также можете настраивать различные HTTP-методы и использовать регулярные выражения при формировании путей:
respond('GET', '/posts', $callback); respond('POST', '/posts/create', $callback); respond('PUT', '/posts/[i:id]', $callback); respond('DELETE', '/posts/[i:id]', $callback); // Обработка нескольких HTTP-методов: respond(array('POST','GET'), $route, $callback); // Или вы можете обрабатывать запросы так: respond('/posts/[create|edit:action]?/[i:id]?', function ($request, $response) { switch ($request->action) { // делаем что-нибудь } });
Это отличное решение для маленьких проектов, но вам следует быть очень дисциплинированным во время использования библиотеки для более крупных проектов, потому что очень быстро ваш код может превратиться в нечитабельный и трудный для обслуживания.
В этом случае лучше будет посмотреть в сторону полноценных MVC-фреймворков, вроде Laravel или CodeIgniter.
3. Ham — библиотека маршрутизации с кэшированием
Ham — это тоже легкая библиотека маршрутизации, а для еще большего выигрыша в скорости она использует кэширование. Пример:
require '../ham/ham.php'; $app = new Ham('example'); $app->config_from_file('settings.php'); $app->route('/pork', function($app) { return "Delicious pork."; }); $hello = function($app, $name='world') { return $app->render('hello.html', array( 'name' => $name )); }; $app->route('/hello/<string>', $hello); $app->route('/', $hello); $app->run();
Для работы этой библиотеки требуется установка XCache или APC, что означает, что у большинства хостеров работать она не будет. Но если что-то из этого установлено, либо вы самостоятельно настраиваете веб-сервер, то вам стоит попробовать этот очень быстрый фреймворк.
4. Assetic — управление ресурсами
Assetic — это фреймворк для управления ресурсам под PHP. Он позволяет удобно управляться с вашими CSS и JS-файлами. Вот как он используется:
use Assetic\Asset\AssetCollection; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; $js = new AssetCollection(array( new GlobAsset('/path/to/js/*'), new FileAsset('/path/to/another.js'), )); echo $js->dump();
Группировка ресурсов в такой манере — хорошая идея, т.к. это позволяет ускорить работу вашего сайта. Помимо того, что уменьшается объем скачиваемых данных, убирается еще и множество ненужных HTTP-запросов (это две вещи, которые больше всего влияют на общее время загрузки страницы).
5. ImageWorkshop — манипуляция изображениями со слоями
ImageWorkshop — это библиотека с открытым исходным кодом, которая позволяет вам манипулировать изображениями со слоями.
С ее помощью вы сможете изменять размер изображений, обрезать их, делать миниатюры, наносить водяные знаки и многое другое. Пример:
// Инициализируем слой norway в изображении norway.jpg $norwayLayer = ImageWorkshop::initFromPath('/path/to/images/norway.jpg'); // Инициализируем слой watermark в изображении watermark.png $watermarkLayer = ImageWorkshop::initFromPath('/path/to/images/watermark.png'); $image = $norwayLayer->getResult(); // Это сгенерированное изображение! header('Content-type: image/jpeg'); imagejpeg($image, null, 95); // Показываем jpg-изображение с 95% качеством exit;
ImageWorkshop создана для того, чтобы облегчить выполнение типичных задач с изображениями средствами PHP. Однако, если вам не хватает ее возможностей, вы можете обратить свое внимание на библиотеку Imagine.
6. Snappy — PDF-библиотека
Snappy — это библиотека, которая умеет делать "снимки" или PDF-документы из URL-сдресов или HTML-документов. Она зависит от wkhtmltopdf, которая доступна под Linux, Windows и OSX. Применяется она примерно так:
require_once '/path/to/snappy/src/autoload.php'; use Knp\Snappy\Pdf; // Инициализируем библиотеку $snappy = new Pdf('/usr/local/bin/wkhtmltopdf'); // Отображаем готовый PDF в браузере header('Content-Type: application/pdf'); header('Content-Disposition: attachment; filename="file.pdf"'); echo $snappy->getOutput('http://www.github.com');
Помните о том, что вызов внешних бинарных кодов может быть запрещен вашим хостинг-провайдером.
7. Idiorm — Легкая ORM-библиотека
Idiorm — это легкая ORM-библиотека и средство быстрого построения PDO-запросов. C этой библиотекой вы забудете про утомительное написание SQL-запросов:
$user = ORM::for_table('user') ->where_equal('username', 'j4mie') ->find_one(); $user->first_name = 'Jamie'; $user->save(); $tweets = ORM::for_table('tweet') ->select('tweet.*') ->join('user', array( 'user.id', '=', 'tweet.user_id' )) ->where_equal('user.username', 'j4mie') ->find_many(); foreach ($tweets as $tweet) { echo $tweet->text; }
У Idiorm есть "сестринская" библиотека Paris, являющаяся реализацией подхода Active Record и построенная на основе Idiorm.
8. Requests — Простые HTTP-запросы
Requests — это библиотека, которая упрощает работу с HTTP-запросами. Если вы похожи на меня и тоже не можете запомнить все те параметры, которые можно пердавать в Curl, то это для вас:
$headers = array('Accept' => 'application/json'); $options = array('auth' => array('user', 'pass')); $request = Requests::get('https://api.github.com/gists', $headers, $options); var_dump($request->status_code); // int(200) var_dump($request->headers['content-type']); // string(31) "application/json; charset=utf-8" var_dump($request->body); // string(26891) "[…]"
Используя эту библиотеку, вы сможете отправлять запросы HEAD, GET, POST, PUT, DELETE и PATCH HTTP, добавлять файлы и параметры с помощью массивов и получать доступ ко всем даннным, возвращенным в ответе сервера.
9. Buzz — простая библиотека для работы с HTTP-запросам
Buzz — еще одна библиотека для удобной работы с HTTP-запросами. Вот пример:
$request = new Buzz\Message\Request('HEAD', '/', 'http://google.com'); $response = new Buzz\Message\Response(); $client = new Buzz\Client\FileGetContents(); $client->send($request, $response); echo $request; echo $response;
Она слабовата в части документации, поэтому вам придется посмотреть код самостоятельно, чтобы проникнуться всеми возможностями, которые она предоставляет. Как вариант — вы можете использовать библиотеку Request, о которой я упоминал немногим ранее.
10. Goutte — Библиотека парсинга
Goutte — это библиотека для того, чтобы "грабить" содержимое страниц и извлекать с них определенные данные. Она предоставляет хороший API, который упрощает выбор тех или иных элементов на удаленной странице.
require_once '/path/to/goutte.phar'; use Goutte\Client; $client = new Client(); $crawler = $client->request('GET', 'http://www.symfony-project.org/'); $link = $crawler->selectLink('Plugins')->link(); $crawler = $client->click($link); // Извлекаем данные, используя CSS-подобный синтаксис: $t = $crawler->filter('#data')->text(); echo "Here is the text: $t";
11. Carbon — Библиотека для работы с датой и временем
Carbon — это простое API-расширение для DateTime. Оно расширеят класс некоторыми полезными методами для работы с датой и временем, например:
printf("Right now is %s", Carbon::now()->toDateTimeString()); printf("Right now in Vancouver is %s", Carbon::now('America/Vancouver')); $tomorrow = Carbon::now()->addDay(); $lastWeek = Carbon::now()->subWeek(); $nextSummerOlympics = Carbon::createFromDate(2012)->addYears(4); $officialDate = Carbon::now()->toRFC2822String(); $howOldAmI = Carbon::createFromDate(1975, 5, 21)->age; $noonTodayLondonTime = Carbon::createFromTime(12, 0, 0, 'Europe/London'); $endOfWorld = Carbon::createFromDate(2012, 12, 21, 'GMT'); // сравнения всегда производятся в UTC if (Carbon::now()->gte($endOfWorld)) { die(); } if (Carbon::now()->isWeekend()) { echo 'Party!'; } echo Carbon::now()->subMinutes(2)->diffForHumans(); // '2 minutes ago'
12. Ubench — Микро-библиотека для проведения тестирования приложения
Ubench — это маленькая библиотека для тестирования вашего PHP-кода. Она мониторит время выполнения скрипта и использование памяти. Пример:
use Ubench\Ubench; $bench = new Ubench; $bench->start(); // Выполняем некоторый код $bench->end(); // Получаем затраченное время и память echo $bench->getTime(); // 156ms or 1.123s echo $bench->getTime(true); // затраченное время (тип float) echo $bench->getTime(false, '%d%s'); // 156ms or 1s echo $bench->getMemoryPeak(); // 152B or 90.00Kb or 15.23Mb echo $bench->getMemoryPeak(true); // пик использования памяти в байтах echo $bench->getMemoryPeak(false, '%.3f%s'); // 152B or 90.152Kb or 15.234Mb // Возвращает данные об использвании памяти на финальной отметке теста echo $bench->getMemoryUsage(); // 152B or 90.00Kb or 15.23Mb
Хорошая идея — запускать такие проверки только во время разработки приложения.
13. Validation — движок для валидации входящих данных
Validation претендует на звание самой удобной библиотеки валидации когда-либо созданной для PHP. Посмотрите сами:
use Respect\Validation\Validator as v; // Простая валидация $number = 123; v::numeric()->validate($number); //true // Валидация "цепочкой" $usernameValidator = v::alnum()->noWhitespace()->length(1,15); $usernameValidator->validate('alganet'); //true // Валидация атрибутов объекта $user = new stdClass; $user->name = 'Alexandre'; $user->birthdate = '1987-07-01'; // Валидация его атрибутов в одной цепочке: $userValidator = v::attribute('name', v::string()->length(1,32)) ->attribute('birthdate', v::date()->minimumAge(18)); $userValidator->validate($user); //true
С помощью этой библиотеки вы можете производить валидацию форм или других данных, отправленных пользователм. В дополнение ко всему, она поддерживает широкий спект проверок, обработку исключений и настраиваемые сообщения об ошибках.
14. Filterus — библиотека фильтрации
Filterus — еще одна библиотека подобного плана, но она умеет не только производить валидацию, но и фильтровать данные, чтобы они соответствовали определенному шаблону. Например:
$f = Filter::factory('string,max:5'); $str = 'This is a test string'; $f->validate($str); // false $f->filter($str); // 'This '
В Filterus есть множество встроенные паттернов, поддержка цепочечного синтаксиса и, более того, она может производить валидацию элементов массива по индивиудальным правилам.
15. Faker — генератор случайных данных
Faker — это PHP-библиотека, которая генерирует для вас случайные данные. Это может быть полезно, когда вам нужно заполнить базу данных тестовой информацией или сгенерировать бессмысленный контент при отладке веб-приложения. Используется очень просто:
// подключаем автозагузчик require_once '/path/to/Faker/src/autoload.php'; // Создаем экземпляр объекта Faker $faker = Faker\Factory::create(); // генерируем данные, обращаясь к свойствам echo $faker->name; // 'Lucy Cechtelar'; echo $faker->address; // "426 Jordy Lodge // Cartwrightshire, SC 88120-6700" echo $faker->text; // Sint velit eveniet. Rerum atque repellat voluptatem quia …
До тех пор пока вы будете обращаться к свойствам объекта, он будет продолжать возвращать случайно сгенерированные данные.
16. Mustache.php — элегантная библиотека работы с шаблонами
Mustache — популярный язык шаблонов, имеющий реализацию практически во всех основных языках программирования. Она дает вам возможность повторно использовать ваши шаблоны как на стороне клиента, так и на стороне сервера. Mustache.php, как вы догадались — это реализация, которая использует PHP:
$m = new Mustache_Engine; echo $m->render('Hello {{planet}}', array('planet' => 'World!')); // "Hello World!"
Продвинутые приемы работы можно посмотреть в официальной документации Mustache docs.
17. Gaufrette — абстрактный уровень работы с файловой системой
Gaufrette — это библиотека, которая предоставляет абстрактный уровень для работы с файловой системой. Благодаря этому вы можете работать с локальными файлами, FTP-сервером, Amazon S3 и другими файлами одинаково.
Такой подход позволяет вам не беспокоиться о том, чтобы заранее знать, каким именно образом вам потребуется получать доступ к файлам в будущем. По сути — принцип инкапсуляции в действии.
use Gaufrette\Filesystem; use Gaufrette\Adapter\Ftp as FtpAdapter; use Gaufrette\Adapter\Local as LocalAdapter; // Локальные файлы: $adapter = new LocalAdapter('/var/media'); // Опциональное использование FTP-адаптера // $ftp = new FtpAdapter($path, $host, $username, $password, $port); // Инициализация файловой системы $filesystem = new Filesystem($adapter); // Используем ее $content = $filesystem->read('myFile'); $content = 'Hello I am the new content'; $filesystem->write('myFile', $content);
Также в данной библиотеке доступна опция кэширования.
18. Omnipay — библиотека обработки платежей
Omnipay — это библиотека обработки платежей для PHP. У нее понятный и последовательный API и с ее помощью, изучив лишь один API, вы сможете работать с большим числом различных платежных процессоров. Например:
use Omnipay\CreditCard; use Omnipay\GatewayFactory; $gateway = GatewayFactory::create('Stripe'); $gateway->setApiKey('abc123'); $formData = ['number' => '4111111111111111', 'expiryMonth' => 6, 'expiryYear' => 2016]; $response = $gateway->purchase(['amount' => 1000, 'card' => $formData]); if ($response->isSuccessful()) { // успешная оплата: обновляем базу данных print_r($response); } elseif ($response->isRedirect()) { // перенаправляем на сайт платежного процессора $response->redirect(); } else { // оплата не прошла: показываем сообщение покупателю exit($response->getMessage()); }
Использование четкого и понятного API делает удобной работу с рядом платежных процессоров.
19. Upload — для обработки загружаемых файлов
Upload — библиотека, которая облегчает загрузку и валидацию файлов. Когда форма отправлена, библиотека может проверить тип файла и его размер:
$storage = new \Upload\Storage\FileSystem('/path/to/directory'); $file = new \Upload\File('foo', $storage); // Валидация загружаемого файла $file->addValidations(array( // Убедимся, что файл имеет тип "image/png" new \Upload\Validation\Mimetype('image/png'), // Убедимся, что файл не больше 5 Мб. (use "B", "K", M", or "G") new \Upload\Validation\Size('5M') )); // Пытаемся загрузить файл try { // Успешно! $file->upload(); } catch (\Exception $e) { // Ошибка при загрузке! $errors = $file->getErrors();
Она позволит вам сэкономить массу времени на написание утомительного кода.
20. HTMLPurifier — XSS-защита
HTMLPurifier (на github) — это библиотека для фильтрации HTML, которая защищает ваш код от XSS-атак благодаря использванию надежных "белых листов" и агрессивному парсингу URL-адресов. Кроме того, она позволяет вам отследить факт того, что разметка соответствует стандартам.
require_once '/path/to/HTMLPurifier.auto.php'; $config = HTMLPurifier_Config::createDefault(); $purifier = new HTMLPurifier($config); $clean_html = $purifier->purify($dirty_html);
Наиболее подходящее применение библиотеки — это случай, когда вы разрешаете пользователям вводить HTML-разметку, которая затем в немодифицированном виде будет выведена на сайт.
21. ColorJizz-PHP — библиотека работы с цветами
ColorJizz — это маленькая библиотека, которая умеет конвертировать между собой разные форматы представления цвета и знакома с простой "цветовой арифметикой":
use MischiefCollective\ColorJizz\Formats\Hex; $red_hex = new Hex(0xFF0000); $red_cmyk = $hex->toCMYK(); echo $red_cmyk; // 0,1,1,0 echo Hex::fromString('red')->hue(-20)->greyscale(); // 555555
22. PHP Geo — библиотека геолокации
PHP Geo — это простая библиотека, которая с высокой точностью подсчитывает расстояния между произвольными географическим точками. Например:
use Location\Coordinate; use Location\Distance\Vincenty; $coordinate1 = new Coordinate(19.820664, -155.468066); // Mauna Kea Summit $coordinate2 = new Coordinate(20.709722, -156.253333); // Haleakala Summit $calculator = new Vincenty(); $distance = $calculator->getDistance($coordinate1, $coordinate2); // returns 128130.850 (meters; ≈128 kilometers)
Это отличный инструмент для приложений, где используются данные о местоположении чего-либо. Для получения координат вы можете использовать HTML5 Location API, Yahoo’s API (или оба, как это сделано в примере с данным приложением)
23. ShellWrap — оболочка для командной строки
ShellWrap — это библиотека, которая позволяет вам использовать мощные средства командой строки Linux/Unix в PHP с использованием приятного синтаксиса:
require 'ShellWrap.php'; use \MrRio\ShellWrap as sh; // Выводим списком все файлы директории echo sh::ls(); // Проверяем ветвь в git (распределенная система для управления версиями файлов) sh::git('checkout', 'master'); // Вы также можете направить вывод одной команды в другую echo sh::grep('html', sh::curl('http://example.com', array( 'location' => true ))); // Создаем файл sh::touch('file.html'); // Удаляем файл sh::rm('file.html'); // Удаляем файл снова (не получится, и мы увидим исключение потому что файл не существует) try { sh::rm('file.html'); } catch (Exception $e) { echo 'Caught failing sh::rm() call'; }
Библиотека выбрасывает исключение, когда в команде происходит ошибка, поэтому вы можете действовать соответствующим образом. И, как уже упоминалось в комментариях, для еще большей гибкости вы можете направлять вывод одной команды на вход другой.
По материалам http://tutorialzine.com
Перевод: Дмитрий Науменко
Хотите освоить PHP-фреймворк CodeIgniter?
Рекомендую Вам ознакомиться с курсом "Воспламенитель Кода: Сайт-Визитка на CodeIgniter".
Видеокурс предназначен для тех, кто хочет быстро создавать гибкие и функциональные сайты-визитки.
В курсе мы пошагово пройдем все этапы создания сайта-визитки: начиная от шаблона, и заканчивая переносом сайта на реальный сервер.
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!
Смотрите также:
Управление доступом к классам: спецификаторы доступа public, private и protected |
|