24 library PHP Keren yang harus Anda Ketahui

Sekarang adalah waktu yang menyenangkan untuk menjadi pengembang PHP. Ada banyak library yang dirilis setiap hari, dan dengan bantuan Composer dan Github. library favorit Anda tidak ada dalam daftar? Ayooo mari berbagi dibagian komentar “Berbagi ilmu itu indah”.

Dispatch – Micro Framework

Dispatch adalah framework PHP mini. Dispatch tidak memberikan full pengatuan MVC, tetapi kita dapat menentukan aturan URL dan metode untuk mengatur aplikasi Anda. Dispatch sangat cocok untuk API, situs sederhana ataupun prototipe :

// 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();

Anda dapat mencocokan tipe tertentu dari permintaan HTTP dan path, memberikan pandangan yang lebih. Jika kita menggabungkan Dispatch dengan beberapa framework lain disini, Anda dapat memiliki setup yang benar-benar kuat dan ringan!

Klein – Lighting fast router for PHP

Klein adalah library routing ringan untuk PHP 5.6+.Klein memiliki lebih sedikit sintaks verbose dari Dispatch, tetapi cukup cepat. Berikut adalah contoh:

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

 Anda juga dapat berlangganan ke metode HTTP tertentu dan menggunakan regex sebagai path:

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

Klein bagus untuk projek-projek kecil, tetapi Anda harus berhati-hati ketika menggunakan library seperti ini untuk aplikasi yang lebih besar,kode Anda dapat menjadi unmaintainable sangat cepat. Untuk tujuan ini, Anda lebih baik menggunakan framework yang full MVC seperti Laravel dan Codeigniter.

Ham – Routing Library with Caching

Ham juga framework routing yang ringan tetapi menggunakan caching untuk lebih meningkatkan kecepatan. Hal ini dicapai dengan caching apapun I / O berhubungan di XCache / APC. Berikut adalah contoh:

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

Library mengharuskan Anda memiliki XCache atau APC yang terinstal, yang mana tidak akan berfungsi di sebagian besar penyedia hosting. Tapi jika Anda memiliki salah satunya dan terinstal atau jika Anda mengontrol web server Anda , Anda harus mencoba framework yang sangat cepat ini.

 Assetic – Asset Management

Assetic adalah framework manajemen asset untuk PHP. Assetic menggabungkan dan mengecilkan assets CSS/JS Anda. Berikut adalah bagaimana digunakan :

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

Menggabungkan asset dengan cara ini adalah ide yang baik, karena dapat mempercepat situs Anda. Tidak hanya total ukuran download berkurang, tetapi juga banyak yang tidak perlu menghilangkan permintaan HTTP (dua dari hal-hal yang mempengaruhi waktu untuk membuka halaman).

ImageWorkshop – Image Manipulation with Layers

ImageWorkshop adalah perpustakaan Open Source yang memungkinkan Anda memanipulasi gambar dengan layer. Dengan itu Anda dapat mengubah ukuran, memotong, membuat thumbnail, menambahkan watermark dan banyak lagi. Berikut adalah contoh:

// 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 dikembangkan untuk memudahkan kasus yang paling umum untuk memanipulasi gambar dalam PHP. Jika Anda membutuhkan sesuatu yang lebih dari hal umum dalam memanipulasi gambar Anda harus melihat Imagine library.

Snappy – Snapshot/PFD Library

Snappy adalah library PHP5 yang memungkinkan Anda untuk mengambil snapshot atau PDF dari URL atau dokumen HTML. Hal ini tergantung pada biner wkhtmltopdf, yang tersedia di Linux, Windows dan OSX. Anda menggunakannya dengan seperti ini:

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

 Perlu diingat bahwa memanggil biner eksternal mungkin tidak diperbolehkan oleh penyedia hosting Anda.

Idiorm – Lightweight ORM Library

Idiorm adalah library ORM ringan dan query builder yang lancar untuk PHP 5 yang dibangun di atas PDO. Dengan ini Anda bisa perlu menuliskan SQL yang membosankan :

$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 memiliki saudara library yang disebut Paris, yang merupakan implementasi Active Record yang dibangun diatasnya.

Underscore – PHP’s Ulitity Belt

Underscore adalah port dari Underscore.js – belt utilitas untuk aplikasi JavaScript. Versi PHP ini tidak mengecewakan dan memiliki dukungan untuk hampir semua fungsi aslinya. Beberapa contoh :

__::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)

Library ini juga memiliki dukungan untuk chaining, yang membuatnya bahkan lebih kuat.

Requests – Easy HTTP Requests

Requests adalah library yang memudahkan untuk mengeluarkan permintaan HTTP. Jika Anda seperti saya, dan tidak pernah bisa mengingat berbagai pilihan yang diteruskan ke Curl, ini adalah untuk Anda:

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

Dengan library ini, Anda dapat mengirim permintaan HEAD, GET, POST, PUT, DELETE dan PATCH HTTP, menambahkan file dan parameter dengan array, dan mengakses semua data respon.

Buzz – Simple HTTP Request Library

Buzz adalah salah satu library PHP untuk mengeluarkan permintaan HTTP. Berikut adalah contohnya :

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

Buzz kurang dalam dokumentasi, sehingga Anda harus membaca source code untuk bisa merasakan semua pilihan yang mendukungnya. Atau Anda bisa pergi ke library Request yang telah disajikan di atas.

Goutte – Web Scrapping Library

Goutte adalah library untuk scrapping website dan mengeluarkan data. Goutte menyediakan API yang bagus yang membuatnya mudah untuk memilih elemen tertentu dari halaman terpencil.

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

Carbon – Date Time Library

Carbon adalah ekstensi API sederhana untuk DateTime. Dapat meningkatkan kelas dengan beberapa metode yang berguna untuk bekerja dengan tanggal dan waktu. Sebagai contoh:

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'

Carbon belum terlihat commit baru dalam beberapa bulan terakhir, sehingga Anda mungkin ingin memeriksa Datum, fork yang terus bekerja.

Ubench – Micro Benchmarking Library

Ubench adalah mikro library untuk benchmarking kode PHP Anda. Ubench memantau waktu pelaksanaan dan penggunaan memori. Berikut ini contohnya :

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

Ubench akan menjadi ide yang baik untuk menjalankan pemeriksaan ketika pengembangan

Validation – Input Validation Engine

Validation mengklaim mesin validasi yang paling mengagumkan yang pernah dibuat untuk PHP. Tapi bisakah memberikannya? See for yourself:

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

Dengan library ini Anda dapat memvalidasi formulir Anda atau data yang dikirimkan pengguna lainnya. Selain itu, mendukung sejumlah pemeriksaan yang ada, membuang pengecualian dan pesan kesalahan disesuaikan.

Filterus – Filtering Library

Filterus adalah library filtering lagi, tetapi tidak hanya dapat memvalidasi, tetapi juga menyaring masukan untuk mencocokkan pola yang telah ditetapkan. Berikut adalah contoh:

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

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

Filterus memiliki banyak pola built-in, mendukung chaining dan bahkan dapat memvalidasi elemen array dengan aturan validasi individu.

Faker – Fake Data Generator

Faker adalah library PHP yang menghasilkan data palsu untuk Anda. Ini bisa berguna ketika Anda perlu mengisi database test atau menghasilkan data sampel untuk aplikasi web Anda. Faker juga sangat mudah digunakan:

// 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 ...

Selama Anda tetap mengakses properti dari objek, ia akan terus kembali ke data yang dihasilkan secara acak.

Mustache.php – Elegant Templatinf Library

Mustache adalah bahasa template populer yang memiliki implementasi di hampir setiap bahasa pemrograman. Ini memberi Anda manfaat yang dapat Anda gunakan kembali template Anda di kedua sisi client dan server. Mustache.php merupakan implementasi yang digunakan – Anda dapat menebaknya – PHP :

$m = new Mustache_Engine;
echo $m->render('Hello {{planet}}', array('planet' => 'World!')); // "Hello World!"

Untuk melihat contoh yang lebih lanjut, saya sarankan untuk melihat dokumentasi Mustache yang resmi.

Gaufrette – File System Abstraction Layer

Gaufrette adalah library PHP5 yang menyediakan layer abstraksi sistem file. Ini memungkinkan untuk bekerja dengan file lokal, server FTP, Amazon S3 banyak dengan cara yang sama. Hal ini memungkinkan Anda untuk mengembangkan aplikasi Anda tanpa harus tahu bagaimana Anda akan mengakses file Anda di masa depan.

use Gaufrette\Filesystem;
use Gaufrette\Adapter\Ftp as FtpAdapter;
use Gaufrette\Adapter\Local as LocalAdapter; 

// Local files:
$adapter = new LocalAdapter('/var/media'); 

// Optionally use an FTP adapter:
// $ftp = new FtpAdapter($path, $host, $username, $password, $port); 

// Initialize the filesystem:
$filesystem = new Filesystem($adapter); 

// Use it: 

$content = $filesystem->read('myFile');
$content = 'Hello I am the new content';
$filesystem->write('myFile', $content);

Ada juga caching dan adaptor di memori, banyak yang akan ditambahkan dari waktu ke waktu.

Omnipay – Payment Processing Library

Omnipay adalah library proses pembayaran untuk PHP. Memiliki API yang jelas dan konsisten dan mendukung puluhan gateway. Dengan library ini, Anda hanya perlu belajar satu API dan bekerja pada berbagai prosesor pembayaran. Berikut adalah contohnya:

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()) {
    // payment was successful: update database
    print_r($response);
} elseif ($response->isRedirect()) {
    // redirect to offsite payment gateway
    $response->redirect();
} else {
    // payment failed: display message to customer
    exit($response->getMessage());
}

Menggunakan API dengan konsisten yang sama memudahkan untuk mendukung beberapa prosesor pembayaran atau untuk beralih sebagai kebutuhan.

Upload – For Handling File Uploads

Upload adalah library yang menyederhanakan upload file dan validasi. Ketika formulir dikirimkan, library dapat memeriksa jenis file dan ukuran:

$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();
}

Ini akan menghemat banyak kode yang membosankan.

HTMLPurifier – HTML XSS Protection

HTMLPurifier (di github) adalah library HTML yang memfilter melindungi kode Anda dari serangan XSS dengan menggunakan kombinasi Whitelist yang kuat dan parsing yang agresif. Hal ini juga memastikan bahwa markup yang dihasilkan memenuhi standar.

require_once '/path/to/HTMLPurifier.auto.php';

$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);

Tempat terbaik untuk menggunakan library ini ketika memungkinkan pengguna untuk mengirimkan HTML yang akan ditampilkan tidak dimodifikasi di situs.

ColorJizz-PHP – Color Manipulation Library

ColorJizz adalah library kecil yang dapat mengkonversikan antara format warna yang berbeda dan melakukan aritmatika warna sederhana. Sebagai contoh :

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

ColorJizz memiliki dukungan untuk memanipulasi semua format warna utama.

PHP Geo – Geo Location Library

Phpgeo adalah library sederhana untuk menghitung jarak antara koordinat geografis dengan presisi tinggi. Sebagai contoh:

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)

Phpgeo akan berfungsi maksimal dalam aplikasi yang menggunaka data lokasi. Untuk mendapatkan koordinat, Anda dapat menggunakan HTML5 Location API, Yahoo Api.

ShellWrap – Beautiful Shell Wrapper

ShellWrap adalah library yang memungkinkan Anda untuk bekerja dengan tools baris perintah Linux/Unix dalam PHP melaui sintaks yang bagus:

require 'ShellWrap.php';
use \MrRio\ShellWrap as sh; 

// List all files in current dir
echo sh::ls(); 

// Checkout a branch in git
sh::git('checkout', 'master'); 

// You can also pipe the output of one command, into another
// This downloads example.com through cURL, follows location, then pipes through grep to
// filter for 'html'
echo sh::grep('html', sh::curl('http://example.com', array(
    'location' => true
))); 

// Touch a file to create it
sh::touch('file.html'); 

// Remove file
sh::rm('file.html'); 

// Remove file again (this fails, and throws an exception because the file doesn't exist) 

try {
    sh::rm('file.html');
} catch (Exception $e) {
    echo 'Caught failing sh::rm() call';
}

Library mengatur pengecualian ketika terjadi kesalahan dalam perintah, sehingga Anda dapat bertindak sesuai. Hal ini juga bisa menggunakan pipe output dari satu perintah sebagai masukan lain untuk fleksibilitas yang lebih besar.

Comments

comments