做为两个PHP开发人员,那时是两个令人难忘的关键时刻。每晚有千千万万管用的库递送出,在Github上很难辨认出和采用那些库。上面是我曾碰到过袖珍的24个库。你最喜欢的库没在那个条目里头?那就在文章中分享吧!
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 a view while passing some locals
render(greet-show, array(name => $name));
});
// serve your site
dispatch();
你能匹配特定类型的HTTP请求和路径,图形快照或做更多事情。如果你合并Dispatch和其他架构,那你就能拥有两个相当强大并且轻量级的程序!
2. Klein – PHP快如闪电的路由器
Klein是另一款针对PHP5.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);
//匹配多种请求方式:
respond(array(POST,GET), $route, $callback);
//你或许也想在相同的地方处置请求
respond(/posts/[create|edit:action] /[i:id] , function ($request, $response) {
switch ($request->action) {
// do something
}
});
对于小型项目而言这是很棒的,但当你把两个像这样的库用于大型应用时,你不得已遵守规矩,因为你的代码可能很快就变得不可维护。所以你最好搭配两个像Laravel或者CodeIgniter这样完全成熟的架构。
3. Ham – 带缓存的路由器库
Ham也是一款轻量级的路由器架构,但是它利用缓存甚至获得了更快的速度。它通过把任何I/O相关的东西缓存进XCache/APC。上面是两个例子:
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其中的两个,这可能意味着,在大多数主机提供商提供的主机上它可能用不了。但是如果你拥有两个安装它们其一的主机,或者你能操控你的web服务器,你应该尝试这款最快的架构。
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.jpg图片初始化norway层
$norwayLayer = ImageWorkshop::initFromPath(/path/to/images/norway.jpg);
// 从watermark.png图片初始化watermark层(水印层)
$watermarkLayer = ImageWorkshop::initFromPath(/path/to/images/watermark.png);
$image = $norwayLayer->getResult(); // 这是生成的图片!
header(Content-type: image/jpeg);
imagejpeg($image, null, 95); // We choose to show a JPG with a quality of 95%
exit;
ImageWorkshop被开发用于使一些PHP中最通用的处置图片的案例简化,如果你需要一些更强大的东西,你应该看下Imagine library!
6. Snappy – 快照/PDF库
Snappy是两个PHP5库,能生成快照、URL、HTML、PDF。它依赖于wkhtmltopdf binary(在Linux,Windows和OSX上都可用)。你能像这样采用它们:
require_once /path/to/snappy/src/autoload.php;
use Knp\Snappy\Pdf;
//通过wkhtmltopdf binary路径初始化库
$snappy = new Pdf(/usr/local/bin/wkhtmltopdf);
//通过把Content-type头增设为pdf来在浏览器中展示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之上的PHP5查询构造器。借助它,你能忘记如何书写乏味的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,Paris是两个基于Idiorm的Active Record实现。
8. Underscore – PHP的工具腰带
Underscore是原始Underscore.js的两个接口 – Javascript应用的工具腰带。PHP版本没让人失望,而且支持了几乎所有原生功能。上面是一些例子:
__::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)
那个库也支持链式语法,这使得它更为强大。
9. 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、DELTE和PATCH HTTP请求,你能通过数组添加文件和参数,并且能访问所有相应数据。
10. 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;
因为它缺乏文档,所以你不得已阅读源码来获知它支持的所有参数。
11. Goutte – Web抓取库
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”;
12. Carbon – DateTime 库
Carbon 是 DateTime API 的两个单纯扩展。
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分钟之前
13. Ubench – 微型基准库
Ubench 是两个用于评测PHP代码的微型库,可监控(代码)执行时间和内存采用率。上面是范例:
use Ubench\Ubench;
$bench = new Ubench;
$bench->start();
//执行一些代码
$bench->end();
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
//在结束标识处返回内存采用情况
echo $bench->getMemoryUsage(); // 152B or 90.00Kb or 15.23Mb
(仅)在开发时运行那些校验是两个好主意。
14. 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
你能通过那个库验证你的表单或其他用户提交的数据。除此之外,它内置了很多校验,抛出异常和定制错误信息。
15. Filterus – 过滤库
Filterus是另两个过滤库,但它不仅仅能验证,也能过滤匹配预设模式的输出。上面是两个例子:
$f = Filter::factory(string,max:5);
$str = This is a test string;
$f->validate($str); // false
$f->filter($str); // This
Filterus有很多内建模式,支持链式用法,甚至能用独立的验证准则去验证数组元素。
16. Faker – 假数据生成器
Faker 是两个为你生成假数据的PHP库。当你需要填充两个测试数据库,或为你的web应用生成测试数据时,它能派上用场。它也非常难采用:
//引用Faker 自动加载器
require_once /path/to/Faker/src/autoload.php;
//采用工厂创建来创建两个Faker\Generator实例
$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 …
只要你继续访问对象属性,它将继续返回随机生成的数据。
17. Mustache.php – 优雅模板库
Mustache是一款流行的模板语言,实际已经在各种编程语言中得到实现。采用它,你能在客户端或服务段重用模板。 正如你猜得那样,Mustache.php 是采用PHP实现的。
$m = new Mustache_Engine;
echo $m->render(Hello {{planet}}, array(planet => World!)); // “Hello World!”
18. Gaufrette – 文件系统抽象层
Gaufrette是两个PHP5库,提供了两个文件系统的抽象层。它使得以相同方式操控本地文件,FTP服务器,亚马逊 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);
也有缓存和内存适配器,并且随后将会增加更多适配器。
19. 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,能很难地支持多种支付处置器,或在需要时进行切换。
20. 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),
//确保文件不超过5M(采用”B”,”K”,”M”或者”G”)
new \Upload\Validation\Size(5M)
));
//试图上传文件
try {
//成功
$file->upload();
} catch (\Exception $e) {
//失败!
$errors = $file->getErrors();
}
它将减少不少乏味的代码。
21. HTMLPurifier – HTML XSS 防护
HTMLPurifier是两个HTML过滤库,通过强大的白名单和聚集分析,保护你代码远离XSS攻击。它也确保输出标记符合标准。 (源码在github上)
require_once /path/to/HTMLPurifier.auto.php;
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);
如果你的网站允许用户提交 HTML 代码,不修改就展示代码的话,那这时候就是用那个库的时候了。
22. 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
它已经支持并且能操控所有主流颜色格式了
23. PHP Geo – 地理位置定位库
phpgeo是两个单纯的库,用于计算地理坐标之间高精度距离。例如:
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)
它将在采用地理位置数据的app里出色工作。你能试译 HTML5 Location API,雅虎的API(或两者都用,我们在weather web ap
24. ShellWrap – 优美的命令行包装器
借助 ShellWrap 库,你能在PHP代码里采用强大的 Linux/Unix 命令行工具。
require ShellWrap.php;
use \MrRio\ShellWrap as sh;
//列出当前文件下的所有文件
echo sh::ls();
//检出两个git分支
sh::git(checkout, master);
//你也能通过管道把两个命令的输出用户另两个命令
//上面通过curl跟踪位置,然后通过grep过滤’html’管道来下载example.com网站
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;
}
当命令行里发生异常时,那个库抛出异常,所以你能及时对之做出反应。它也能通过管道让你两个命令的输出做为另两个命令的输入,来实现更强的灵活性。
来自:kelinlin