本文共 11625 字,大约阅读时间需要 38 分钟。
作为一个PHP开发者,现在是一个令人激动的时刻。每天有许许多多有用的库分发出来,在 上很容易发现和使用这些库。下面是收集整理的24个库。大家一起来看看吧。 1. Dispatch:微框架 是一个PHP小框架。它并没有给你完整的MVC设置,但你可以定义URL规则和方法,以便更好组织应用程序。这对API、简单的站点或原型来说是完美的。 -
- include 'dispatch.php';
-
-
- get('/greet', function () {
-
- render('greet-form');
- });
-
-
- post('/greet', function () {
- $name = from($_POST, 'name');
-
- render('greet-show', array('name' => $name));
- });
-
-
- dispatch();
你可以匹配特定类型的HTTP请求和路径,渲染视图或做更多事情。如果你合并Dispatch和其他框架,那你就可以拥有一个相当强大并且轻量级的程序! 2. Klein:PHP快如闪电的路由 是另一款针对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) {
-
- }
- });
对于小型项目来说这是很棒的,但当你把一个像这样的库用于大型应用时,你不得不遵守规矩,因为你的代码可能很快就变得不可维护。所以你最好搭配一个像 或者 这样完全成熟的框架。 3. 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:资源管理 是一个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:带层的图片处理 是一个让你操控带层图片的开源库。借助它你可以重定义尺寸、裁剪、制作缩略图、打水印或做更多事情。下面是一个例子: -
- $norwayLayer = ImageWorkshop::initFromPath('/path/to/images/norway.jpg');
-
-
- $watermarkLayer = ImageWorkshop::initFromPath('/path/to/images/watermark.png');
-
- $image = $norwayLayer->getResult();
-
- header('Content-type: image/jpeg');
- imagejpeg($image, null, 95);
- exit;
ImageWorkshop被开发用于使一些PHP中最通用的处理图片的案例简化,如果你需要一些更强大的东西,你应该看下 ! 6. Snappy:快照/PDF库 是一个PHP5库,可以生成快照、URL、HTML、PDF。它依赖于 binary(在Linux,Windows和OSX上都可用)。你可以像这样使用它们: - require_once '/path/to/snappy/src/autoload.php';
-
- use Knp\Snappy\Pdf;
-
-
- $snappy = new Pdf('/usr/local/bin/wkhtmltopdf');
-
-
-
- header('Content-Type: application/pdf');
- header('Content-Disposition: attachment; filename="file.pdf"');
-
- echo $snappy->getOutput('http://www.github.com');
要记得,你的主机提供商可能不允许调用外部二进制程序。 7. Idiorm:轻量级ORM库 它是一款轻量级的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有一个姊妹库叫 , 是一个基于Idiorm的Active Record实现。 8. Underscore:PHP的工具腰带 是原始 的一个接口 – Javascript应用的工具腰带。PHP版本没有让人失望,而且支持了几乎所有原生功能。下面是一些例子: - __::each(array(1, 2, 3), function($num) { echo $num . ','; });
-
- $multiplier = 2;
- __::each(array(1, 2, 3), function($num, $index) use ($multiplier) {
- echo $index . '=' . ($num * $multiplier) . ',';
- });
-
-
- __::reduce(array(1, 2, 3), function($memo, $num) { return $memo + $num; }, 0);
-
- __::find(array(1, 2, 3, 4), function($num) { return $num % 2 === 0; });
-
- __::filter(array(1, 2, 3, 4), function($num) { return $num % 2 === 0; });
这个库也支持链式语法,这使得它更为强大。 9. Requests:简单HTTP请求 是一个简化HTTP请求的库: - $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);
-
-
- var_dump($request->headers['content-type']);
-
-
- var_dump($request->body);
-
借助这个库,你可以发送HEAD、GET、POST、PUT、DELTE和PATCH HTTP请求,你可以通过数组添加文件和参数,并且可以访问所有相应数据。 10. Buzz:简单的HTTP请求库 是另一个完成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抓取库 是一个抓取网站和提取数据的库。它提供了一个优雅的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);
-
-
- $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');
-
-
- if (Carbon::now()->gte($endOfWorld)) {
- die();
- }
-
- if (Carbon::now()->isWeekend()) {
- echo 'Party!';
- }
-
- echo Carbon::now()->subMinutes(2)->diffForHumans();
13. Ubench:微型基准库 Ubench 是一个用于评测PHP代码的微型库,可监控(代码)执行时间和内存使用率。下面是范例: - use Ubench\Ubench;
-
- $bench = new Ubench;
-
- $bench->start();
-
-
-
- $bench->end();
-
-
- echo $bench->getTime();
- echo $bench->getTime(true);
- echo $bench->getTime(false, '%d%s');
-
- echo $bench->getMemoryPeak();
- echo $bench->getMemoryPeak(true);
- echo $bench->getMemoryPeak(false, '%.3f%s');
-
-
- echo $bench->getMemoryUsage();
(仅)在开发时运行这些校验是一个好主意。 14. Validation:输入验证引擎 声称是PHP库里最强大的验证引擎。但是,它能名副其实吗?看下面: - use Respect\Validation\Validator as v;
-
-
- $number = 123;
- v::numeric()->validate($number);
-
-
- $usernameValidator = v::alnum()->noWhitespace()->length(1,15);
- $usernameValidator->validate('alganet');
-
-
- $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);
你可以通过这个库验证你的表单或其他用户提交的数据。除此之外,它内置了很多校验,抛出异常和定制错误信息。 15. Filterus:过滤库 是另一个过滤库,但它不仅仅可以验证,也可以过滤匹配预设模式的输出。下面是一个例子: - $f = Filter::factory('string,max:5');
- $str = 'This is a test string';
-
- $f->validate($str);
- $f->filter($str);
Filterus有很多内建模式,支持链式用法,甚至可以用独立的验证规则去验证数组元素。 16. Faker:假数据生成器 是一个为你生成假数据的PHP库。当你需要填充一个测试数据库,或为你的web应用生成测试数据时,它能派上用场。它也非常容易使用: -
- require_once '/path/to/Faker/src/autoload.php';
-
-
- $faker = Faker\Factory::create();
-
-
- echo $faker->name;
-
- echo $faker->address;
-
-
-
- echo $faker->text;
-
只要你继续访问对象属性,它将继续返回随机生成的数据。 17. Mustache.php:优雅模板库 Mustache是一款流行的模板语言,实际已经在各种编程语言中得到实现。使用它,你可以在客户端或服务段重用模板。 正如你猜得那样, 是使用PHP实现的。 - $m = new Mustache_Engine;
- echo $m->render('Hello { {planet}}', array('planet' => 'World!'));
建议看一下官方网站 查看更多高级的例子。 18. Gaufrette:文件系统抽象层 是一个PHP5库,提供了一个文件系统的抽象层。它使得以相同方式操控本地文件,FTP服务器,亚马逊 S3或更多操作变为可能。它允许你开发程序时,不用了解未来你将怎么访问你的文件。 - use Gaufrette\Filesystem;
- use Gaufrette\Adapter\Ftp as FtpAdapter;
- use Gaufrette\Adapter\Local as LocalAdapter;
-
-
- $adapter = new LocalAdapter('/var/media');
-
-
-
-
-
- $filesystem = new Filesystem($adapter);
-
-
- $content = $filesystem->read('myFile');
- $content = 'Hello I am the new content';
- $filesystem->write('myFile', $content);
也有缓存和内存适配器,并且随后将会增加更多适配器。 19. 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:处理文件上传 是一个简化文件上传和验证的库。上传表单时,这个库会校验文件类型和尺寸。 - $storage = new \Upload\Storage\FileSystem('/path/to/directory');
- $file = new \Upload\File('foo', $storage);
-
-
- $file->addValidations(array(
-
- new \Upload\Validation\Mimetype('image/png'),
-
-
- new \Upload\Validation\Size('5M')
- ));
-
-
- try {
-
- $file->upload();
- } catch (\Exception $e) {
-
- $errors = $file->getErrors();
- }
它将减少不少乏味的代码。 21. HTMLPurifier:HTML XSS 防护 是一个HTML过滤库,通过强大的白名单和聚集分析,保护你代码远离XSS攻击。它也确保输出标记符合标准。(源码 上) - 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:颜色操控库 是一个简单的库,借助它你可以转换不同的颜色格式,并且做简单的颜色运算 - use MischiefCollective\ColorJizz\Formats\Hex;
-
- $red_hex = new Hex(0xFF0000);
- $red_cmyk = $hex->toCMYK();
- echo $red_cmyk;
-
- echo Hex::fromString('red')->hue(-20)->greyscale();
它已经支持并且可以操控所有主流颜色格式了 23. PHP Geo:地理位置定位库 是一个简单的库,用于计算地理坐标之间高精度距离。例如: - use Location\Coordinate;
- use Location\Distance\Vincenty;
-
- $coordinate1 = new Coordinate(19.820664, -155.468066);
- $coordinate2 = new Coordinate(20.709722, -156.253333);
-
- $calculator = new Vincenty();
- $distance = $calculator->getDistance($coordinate1, $coordinate2);
它将在使用地理位置数据的app里出色工作。你可以试译 HTML5 Location API,雅虎的API(或两者都用,我们在 中这样做了),来获取坐标。 24. ShellWrap:优美的命令行包装器 借助 库,你可以在PHP代码里使用强大的 Linux/Unix 命令行工具。 - require 'ShellWrap.php';
- use \MrRio\ShellWrap as sh;
-
-
- echo sh::ls();
-
-
- sh::git('checkout', 'master');
-
-
-
- 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';
- }
当命令行里发生异常时,这个库抛出异常,所以你可以及时对之做出反应。它也可以通过管道让你一个命令的输出作为另一个命令的输入,来实现更强的灵活性。 原文链接: / 翻译: - 转载地址:http://fibvi.baihongyu.com/