手把手教大神,PHP开发者不得不学的24个超级PHP库

2023-05-26 0 991

手把手教大神,PHP开发者不得不学的24个超级PHP库

做为两个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

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务