Giới thiệu một số thư viện trong PHP

Khi đã là một lập trình viên website thì một điều chắc chắn với bất cứ ai là bạn cần phải sử dụng lại thư viện của người khác đã viết để tiết kiệm thời gian và những lỗi phát sinh.

Có rất nhiều thư viện PHP hữu ích được phát triển mỗi ngày, và với sự giúp đỡ của Composer và Github, chúng ta dễ dàng khám phá và sử dụng. Dưới đây là một số thư viện thú vị nhất.

1. Requests – Easy HTTP Requests

Requests là một thư viện giúp bạn có thể dễ dàng để đưa ra các HTTP requests. Thư viện này bao gồm một số hàm như sau:

$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) "[…]"

Với thư viện này, bạn có thể gửi HEAD, GET, POST, PUT, DELETE và các yêu cầu HTTP, thêm các tập tin và các thông số với mảng, và truy cập tất cả các dữ liệu được đáp ứng.

2. Carbon – DateTime Library

Carbon là một API mở rộng đơn giản cho ngày và giờ. Nó giúp tăng cường các một số phương pháp hữu ích để làm việc với ngày và thời gian. Ví dụ:

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');

// comparisons are always done in UTC
if (Carbon::now()->gte($endOfWorld)) {
    die();
}

if (Carbon::now()->isWeekend()) {
    echo 'Party!';
}

echo Carbon::now()->subMinutes(2)->diffForHumans(); // '2 minutes ago'

3. Faker – Fake Data Generator

Bạn có thể tạo dữ liệu trực tiếp từ nhiều cách khác nhau. Nhưng với thư viện Faker bạn có thể tạo ra một bộ dữ liệu giả nhưng không khác gì dữ liệu thật. Nó tiện dụng khi bạn cần có một cơ sở dữ liệu test hoặc tạo ra các dữ liệu mẫu cho ứng dụng web của bạn. Nó cũng rất dễ dàng để sử dụng:

// require the Faker autoloader
require_once '/path/to/Faker/src/autoload.php';

// use the factory to create a Faker\Generator instance
$faker = Faker\Factory::create();

// generate data by accessing properties
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 ...

Miễn là bạn tiếp tục truy cập vào các thuộc tính của đối tượng, nó sẽ tiếp tục quay trở lại dữ liệu ngẫu nhiên tạo ra

4. Assetic – Asset Management

Assetic dùng để quản lý asset cho PHP framework. Nó kết hợp và làm gọn CSS/JS của bạn. Nó được sử dụng như sau:

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'),
));

// the code is merged when the asset is dumped
echo $js->dump();

Kết hợp tài nguyên theo cách này là một ý tưởng tốt, vì nó có thể tăng tốc độ trang web của bạn. Không chỉ là tổng kích thước giảm mà cũng có rất nhiều các yêu cầu HTTP không cần thiết được loại bỏ (hai trong những yếu tố này quyết định đến tốc độ tải trang).

** 5. ImageWorkshop – Image Manipulation with Layers **

ImageWorkshop là một thư viện mã nguồn mở cho phép bạn thao tác hình ảnh với các lớp. Với nó, bạn có thể thay đổi kích thước, cắt xén, làm cho hình thu nhỏ. Đây là một ví dụ:

// We initialize the norway layer from the picture norway.jpg
$norwayLayer = ImageWorkshop::initFromPath('/path/to/images/norway.jpg');

// We initialize the watermark layer from the picture watermark.png
$watermarkLayer = ImageWorkshop::initFromPath('/path/to/images/watermark.png');

$image = $norwayLayer->getResult(); // This is the generated image !

header('Content-type: image/jpeg');
imagejpeg($image, null, 95); // We choose to show a JPG with a quality of 95%
exit;

ImageWorkshop được phát triển để thực hiện dễ dàng cho các thao tác với hình ảnh phổ biến nhất trong PHP. Nếu bạn cần một cái gì đó mạnh mẽ hơn nữa, bạn nên xem xét các Imagine library.

** 6. Snappy – Snapshot/PDF Library **

Snappy là một thư viện PHP5 cho phép bạn chụp những bức ảnh hoặc file PDF của URL hoặc các tài liệu HTML. Nó phụ thuộc vào wkhtmltopdf, có sẵn trên Linux, Windows và OSX. Cách dùng nó như sau:

require_once '/path/to/snappy/src/autoload.php';

use Knp\Snappy\Pdf;

// Initialize the library with the
// path to the wkhtmltopdf binary:
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf');

// Display the resulting pdf in the browser
// by setting the Content-type header to pdf:

header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="file.pdf"');

echo $snappy->getOutput('http://www.github.com');

7. Idiorm – Lightweight ORM Library

Idiorm là một thư viện ORM nhẹ và là một truy vấn cho PHP5 được xây dựng dựa trên PDO. Với nó, bạn có thể quên cách viết tẻ nhạt của 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;
}

8. Underscore – PHP’s Utility Belt

Underscore là một cổng của Underscore.js - vành đai tiện ích cho các ứng dụng JavaScript. Phiên bản PHP đã không làm cho chúng ta thất vọng mà nó đã hỗ trợ cho gần như tất cả các chức năng của bản gốc. Một số ví dụ:

__::each(array(1, 2, 3), function($num) { echo $num . ','; }); // 1,2,3,

$multiplier = 2;
__::each(array(1, 2, 3), function($num, $index) use ($multiplier) {
  echo $index . '=' . ($num * $multiplier) . ',';
});
// prints: 0=2,1=4,2=6,

__::reduce(array(1, 2, 3), function($memo, $num) { return $memo + $num; }, 0); // 6

__::find(array(1, 2, 3, 4), function($num) { return $num % 2 === 0; }); // 2

__::filter(array(1, 2, 3, 4), function($num) { return $num % 2 === 0; }); // array(2, 4)

Thư viện cũng đã hỗ trợ cho chuỗi, không những vậy nó còn làm cho nó thậm chí còn mạnh mẽ hơn.

9. Dispatch – Micro Framework

Dispatch là một PHP framework nhỏ. Nó cung cấp cho bạn một thiết lập MVC đầy đủ, nhưng có thể định nghĩa quy định URL và phương pháp tốt hơn ứng dụng của bạn. Hoàn hảo cho các API, các trang web đơn giản hoặc nguyên mẫu:

// include the library
include 'dispatch.php';

// define your routes
get('/greet', function () {
    // render a view
    render('greet-form');
});

// post handler
post('/greet', function () {
    $name = from($_POST, 'name');
    // render a view while passing some locals
    render('greet-show', array('name' => $name));
});

// serve your site
dispatch();

Nếu kết hợp với một số frameworks ở đây, bạn có thể có một thiết lập thực sự mạnh mẽ và vô cùng nhẹ!

** 10. Buzz – Simple HTTP Request Library**

Buzz là một thư viện PHP cho các HTTP requests. Đây là một ví dụ:

$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;

Nó không có tài liệu hướng dẫn, vì vậy bạn sẽ phải đọc thông qua các mã nguồn để có thể biết được tất cả các tùy chọn mà nó hỗ trợ.

** 11. Goutte – Web Scraping Library**

Goutte là một thư viện để quét trang web và giải nén dữ liệu.

require_once '/path/to/goutte.phar';

use Goutte\Client;

$client = new Client();
$crawler = $client->request('GET', 'http://www.symfony-project.org/');

// Click on links:

$link = $crawler->selectLink('Plugins')->link();
$crawler = $client->click($link);

// Extract data with a CSS-like syntax:

$t = $crawler->filter('#data')->text();

echo "Here is the text: $t";

12. Klein – Lightning fast router for PHP

Klein là một thư viện định tuyến (routing) nhẹ dành cho PHP 5.3 +. Nó có nhiều hơn một số cú pháp, nhưng là khá nhanh. Đây là một ví dụ:

respond('/[:name]', function ($request) {
    echo 'Hello ' . $request->name;
});

Bạn cũng có thể đăng ký các phương thức HTTP cụ thể và sử dụng regexes như đường dẫn:

respond('GET', '/posts', $callback);
respond('POST', '/posts/create', $callback);
respond('PUT', '/posts/[i:id]', $callback);
respond('DELETE', '/posts/[i:id]', $callback);

// To match multiple request methods:
respond(array('POST','GET'), $route, $callback);

// Or you might want to handle the requests in the same place
respond('/posts/[create|edit:action]?/[i:id]?', function ($request, $response) {
    switch ($request->action) {
        // do something
    }
});

Điều này là rất tốt cho các dự án nhỏ, nhưng bạn phải xử lý kỹ khi sử dụng một thư viện như thế này cho các ứng dụng lớn hơn, nhưng mã của bạn có thể bảo trì và nâng cấp rất nhanh. Với mục đích này, bạn sẽ được một khung MVC framework đầy đủ như Laravel hoặc CodeIgniter.

13. Ubench – Micro Benchmarking Library

Ubench là một thư viện nhỏ cho chuẩn mã PHP của bạn. Nó theo dõi thời gian thực hiện và sử dụng bộ nhớ. Đây là một ví dụ:

use Ubench\Ubench;

$bench = new Ubench;

$bench->start();

// Execute some code

$bench->end();

// Get elapsed time and memory
echo $bench->getTime(); // 156ms or 1.123s
echo $bench->getTime(true); // elapsed microtime in float
echo $bench->getTime(false, '%d%s'); // 156ms or 1s

echo $bench->getMemoryPeak(); // 152B or 90.00Kb or 15.23Mb
echo $bench->getMemoryPeak(true); // memory peak in bytes
echo $bench->getMemoryPeak(false, '%.3f%s'); // 152B or 90.152Kb or 15.234Mb

// Returns the memory usage at the end mark
echo $bench->getMemoryUsage(); // 152B or 90.00Kb or 15.23Mb

14. Validation – Input Validation Engine

Validation là công cụ xác nhận tuyệt vời nhất từng được tạo ra cho PHP. Nhưng nó có thể cung cấp được gì?

use Respect\Validation\Validator as v;

// Simple Validation

$number = 123;
v::numeric()->validate($number); //true

// Chained Validation

$usernameValidator = v::alnum()->noWhitespace()->length(1,15);
$usernameValidator->validate('alganet'); //true

// Validating Object Attributes

$user = new stdClass;
$user->name = 'Alexandre';
$user->birthdate = '1987-07-01';

// Validate its attributes in a single chain:

$userValidator = v::attribute('name', v::string()->length(1,32))
                  ->attribute('birthdate', v::date()->minimumAge(18));

$userValidator->validate($user); //true

Với thư viện này, bạn có thể xác nhận các dữ liệu người dùng gửi. Ngoài ra, nó hỗ trợ một số lượng lớn các kiểm tra hiện có, ngoại lệ và thông báo lỗi tùy chỉnh.

15. Filterus – Filtering Library

Filterus là một thư viện bộ lọc, nhưng nó cũng có thể xác định đàu vào của bộ lọc để phù hợp với một mô hình định sẵn. Đây là một ví dụ:

$f = Filter::factory('string,max:5');
$str = 'This is a test string';

$f->validate($str); // false
$f->filter($str); // 'This '

Filterus có rất nhiều mô hình tích hợp, hỗ trợ chuỗi và thậm chí có thể xác nhận các phần tử mảng với quy tắc xác nhận cá nhân.

17. Upload – For Handling File Uploads

Upload là một thư viện đơn giản hóa tập tin tải lên và xác nhận. Khi một mẫu được gửi, thư viện có thể kiểm tra các loại tập tin và kích thước:

$storage = new \Upload\Storage\FileSystem('/path/to/directory');
$file = new \Upload\File('foo', $storage);

// Validate file upload
$file->addValidations(array(
    // Ensure file is of type "image/png"
    new \Upload\Validation\Mimetype('image/png'),

    // Ensure file is no larger than 5M (use "B", "K", M", or "G")
    new \Upload\Validation\Size('5M')
));

// Try to upload file
try {
    // Success!
    $file->upload();
} catch (\Exception $e) {
    // Fail!
    $errors = $file->getErrors();
}

nó giúp tiết kiệm rất nhiều dòng code.

17. Ham – Routing Library with Caching

Ham cũng là một khuôn khổ định tuyến nhẹ nhưng nó sử dụng bộ nhớ đệm cho nhiều hơn tăng tốc độ. Nó đạt được điều này bằng cách cache bất cứ điều gì I/O liên quan trong XCache/APC. Đây là một ví dụ:

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/', $hello);
$app->route('/', $hello);

$app->run();

Thư viện đòi hỏi bạn phải có một trong hai XCache hoặc APC được cài đặt, có nghĩa là nó sẽ không hoạt động trên hầu hết các hosting.

18. PHP Geo – Geo Location Library

PHPGEO là một thư viện đơn giản để tính toán khoảng cách giữa các tọa độ địa lý với độ chính xác cao. Ví dụ:

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)

Điều này sẽ làm việc tốt trong các ứng dụng có sử dụng dữ liệu vị trí. Để có được tọa độ, bạn có thể sử dụng HTML5 từ API, API của Yahoo (hoặc cả hai, như chúng tôi đã làm trong ứng dụng thời tiết web hướng dẫn a>).

Trên đây là một số thư viện hữu ích của PHP. Chúc các bạn nghiên cứu và ứng dụng thành công. ^^