Язык программирования PHP выпущен более 20 лет назад, но это не мешает ему по прежнему оставаться одним из самых популярных языков и первым выбором многих back-end разработчиков. Сообщество PHP на GitHub также является одним из самых больших и активных, постоянно появляются новые удивительные проекты. Я подобрал некоторые интересные, на мой взгляд PHP библиотеки с открытым исходным кодом, которые вы можете использовать в своих разработках.

PHPExcel

Набор PHP классов, которые позволяют разработчикам легко реализовать редактирование электронных таблиц в ваших приложениях. Библиотека может читать и писать электронные таблицы в ряд популярных форматов, включая Excel (xls и xlsx), Opendocument (ODT) и CSV.

include 'PHPExcel/IOFactory.php';
 
$inputFileName = './sampleData/example1.xls';
 
echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory';
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
 
$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
var_dump($sheetData);

Opauth

Библиотека позволяет пользователям авторизоваться с помощью своей учетной записи в социальных сетях или других сервисах. Конечно доступны наиболее популярные сети Google, Facebook, Twitter, Github, Instagram, LinkedIn. Opauth поддерживается многими фреймворками, поэтому может быть легко интегрирован в большинство php приложений.

'Strategy' => array( 
    // Define strategies here.
 
    'Facebook' => array(
        'app_id' => 'YOUR APP ID',
        'app_secret' => 'YOUR APP SECRET'
    ),
);

FastCache

Внедрение этой системы кэширования в PHP приложение гарантированно заставит их работать быстрее, за счёт уменьшения количества запросов к базе данных. Вместо того, чтобы выполнять каждый запрос к БД, FastCache отправляет только уникальные, сохраняет их в кэш и потом берёт их от туда для каждого повторения. Таким образом, если у вас одни запрос повторяется 1000 раз, он будет загружен из БД только один раз, остальные 999 запросов выполнятся из кэша.

use phpFastCache\CacheManager;
 
$config = array(
    "storage"   =>  "files",
    "path"      =>  "/your_cache_path/dir/",
);
CacheManager::setup($config);
 
// Try to get from Cache first with an Identity Keyword
$products = CacheManager::get("products");
 
// If not available get from DB and save in Cache.
if(is_null($products)) {
    $products = "DB SELECT QUERY";
    // Cache your $products for 600 seconds.
    CacheManager::set($cache_keyword, $products,600);
}

Guzzle

Guzzle –это один из лучших http клиентов. Он может обрабатывать почти любые задачи http, которые вы отправляете в него: синхронные и асинхронные запросы, куки http, потоковое видео. Работа с Guzzle очень проста, хорошо написана документация, есть большое количество примеров с подробным объяснением.

$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.github.com/user', [
    'auth' => ['user', 'pass']
]);
echo $res->getStatusCode();
// "200"
echo $res->getHeader('content-type');
// 'application/json; charset=utf8'
echo $res->getBody();
// {"type":"User"...'
 
// Send an asynchronous request.
$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org');
$promise = $client->sendAsync($request)->then(function ($response) {
    echo 'I completed! ' . $response->getBody();
});
$promise->wait();

Twig

Шаблонизатор с очень чистым синтаксисом, который делает разметку короче и проще в написании. Twig предлагает всё что вы ожидаете от современного библиотеки шаблонов: экранирования переменных, циклы, if/else блоки, а также защищенный режим песочницы для проверка кода шаблона.


// Rendering
require_once '/path/to/lib/Twig/Autoloader.php';
Twig_Autoloader::register();
 
$loader = new Twig_Loader_Filesystem('/path/to/templates');
$twig = new Twig_Environment($loader, array(
    'cache' => '/path/to/compilation_cache',
));
 
echo $twig->render('index.html', array('name' => 'George'));

Goutte

Goutte – это как называемый веб-скребок, который может сканировать веб-сайты и извлекать HTML и XML данные из них. Он посылает запросы на необходимый URL и возвращает объект Crawler, который позволяет разработчику взаимодействовать с удалённой страницей различными способами.

use Goutte\Client;
$client = new Client();
 
// Go to the symfony.com website
$crawler = $client->request('GET', 'http://www.symfony.com/blog/');
 
// Click on the links
$link = $crawler->selectLink('Security Advisories')->link();
$crawler = $client->click($link);
 
// Extract data
$crawler->filter('h2 > a')->each(function ($node) {
    print $node->text()."\n";
});

PHPMailer

Как же не включить в обзор интересных PHP библиотек PHPMailer. Этот проект поддерживается огромным сообществом и реализуется в популярных системах, таких как WordPress и Drupal, что делает его самым безопасным методом для отправки писем в PHP.

require 'PHPMailerAutoload.php';
 
$mail = new PHPMailer;
 
$mail->setFrom('from@example.com', 'Mailer');
$mail->addAddress('steve@example.com');   
 
$mail->addAttachment('/var/tmp/file.tar.gz');       
$mail->isHTML(true);                                 
 
$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body in bold!';
 
if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}

Hoa

Hoa – на самом деле не библиотека PHP, а целый набор библиотек, содержащий все виды полезных утили для веб-разработки. Сейчас есть более 50 библиотек и они постоянно пополняются, хотя не все они полностью документированы. Сборка полностью модульная, так что вы можете сами выбрать только необходимые библиотеки.

// Hoa Mail
$message            = new Hoa\Mail\Message();
$message['From']    = 'Gordon Freeman <gordon@freeman.hf>';
$message['To']      = 'Alyx Vance <alyx@vance.hf>';
$message['Subject'] = 'Hoa is awesome!';
$message->addContent(
    new Hoa\Mail\Content\Text('Check this out: http://hoa-project.net/!')
);
$message->send();
 
// Hoa Session
$user = new Hoa\Session\Session('user');
 
if ($user->isEmpty()) {
    echo 'first time', "\n";
    $user['foo'] = time();
} else {
    echo 'other times', "\n";
    var_dump($user['foo']);
}

ColorExtractor

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

require 'vendor/autoload.php';
 
use League\ColorExtractor\Color;
use League\ColorExtractor\Palette;
 
$palette = Palette::fromFilename('./some/image.png');
 
$topFive = $palette->getMostUsedColors(5);
$colorCount = count($palette);
$blackCount = $palette->getColorCount(Color::fromHexToInt('#000000'));