PHP开发工具Yaconf、forp、Belt、Identity Toolkit PHP Client介绍

以下为你介绍的PHP开发工具都可用在Linux系统上:Yaconf(高性能的配置管理扩展)、forp(PHP 分析工具)、Belt(PHP 开发工具)、Identity Toolkit PHP Client(PHP 客户端库)。

1、Yaconf(高性能的配置管理扩展)

PHP开发工具Yaconf、forp、Belt、Identity Toolkit PHP Client介绍

这个项目其实不是我新的idea,这个是我在来微博以后,第一个优化项目中顺手做的一个小工具,本身叫做Weibo_Conf.但是因为Weibo_Conf是属于Weibo扩展的,里面还有一些其他功能是专门为Weibo定制的.所以不适合直接开源.

随着PHP7的发布,新增了很多持久化类型的支持比如IS_IMMUTABLE_ARRAY,于是我就在PHP7下重新开发了Yaconf,开源出来,方便大家使用.

首先说说,这个是干啥的.

1].我见过很多的项目中,用PHP文件做配置的,一个config目录下可能有十几个甚至数十个.php配置文件,里面都是各种各样的array,还有甚者会把一些词典文件(比如中文/英文对照)也放到配置中去.这就导致配置文件的解析耗费了很大的性能(诚然,用了opcache能好点,但是实际上还是有执行的过程).

2].除了PHP的,还有用json的,yaml的,一个共同的特点就是这些配置的可读性比较差.另外,他们也都要runtime解析.

3].config目录往往和代码在一起,首先会有安全隐患(配置中往往有敏感信息),其次如果配置和代码属于一个项目,这就会导致配置的修改也要走代码上线的流程.

4].一些资源配置文件,比如mysql/memcache的配置信息,这些内容本来是应该对开发透明的,运维直接负责即可.但是放到了代码中就会导致,运维如果要发起一些变更,也要开发配合修改配置文件上线.

所以,Yaconf就是为了解决这些问题而生的一个工具.

1].它使用单独的一个配置目录(在yaconf.directory指定),不和代码在一起.

2].它在PHP启动的时候,处理所有的要处理的配置,然后这些配置就会常驻内存,随着PHP的生命周期存亡.避免了每次请求的时候解析配置文件.

3].所有的配置内容都是immutable的,这就可以借助于Fork的COW,降低内存占用,并且在访问配置的时候,几乎不需要任何的内存Copy,也不会有无谓的引用计数增减.

4].最重要的,配置目录和代码分离以后,可以借助一个配置管理后台,来实现配置的统一化管理.

5].它支持(对于非ZTS)配置变更重新加载,也就是说配置如果有变化(建议更改配置一定使用mv,不要使用cp),它会reload,不需要重启(检测的频率由yaconf.check_delay控制).

6].它支持丰富的配置类型,包括字符串,数组,分节,分节继承,并且还可以在配置中直接写PHP的常量和环境变量等.

7].最重要的是,它很简单.

API:

Yaconf 只提供了俩个方法.

mixed Yaconf::get(string $name, mixed $default = NULL)

这个是获取一个配置,名字是配置的名字,一般来说如果你有一个ini文件叫做foo.ini,那么$name使用foo的话就会获取到这个文件内的所有内容,以数组形式返回.default是当配置不存在的时候返回的默认值.

bool Yaconf::has(string $name)

这个是检测一个配置是否存在.

Yaconf的配置项:

yaconf.directory

配置文件目录,这个配置不能通过ini_set指定,因为必须在PHP启动的时候就确定好.

yaconf.check_delay

多久(秒)检测一次文件变动,如果是0就是不检测,也就是说如果是0的时候,文件变更只能通过重启PHP重新加载.

在Linux上编译Yaconf:

Yaconf是PECL扩展,因此您可以通过以下方式简单地安装它:

$pecl install yaconf

或者您可以自己编译:

$ /path/to/php7/bin/phpize

$ ./configure --with-php-config=/path/to/php7/bin/php-config

$ make && make install

下载地址:https://github.com/laruence/yaconf

2、forp(PHP 分析工具)

forp 是简单,非侵入式的,面向产品的 PHP 分析工具。forp 是轻量级的 PHP 扩展,提供 PHP 分析数据。

主要特性:

时间测量和每个函数的内存分配。

CPU 使用。

函数调用的文件和行数。

使用 Google Trace Event 格式输出。

函数说明。

函数分组。

函数别名 (对匿名函数有用)。

简单示例:

<?php

// first thing to do, enable forp profiler

forp_start();

// here, our PHP code we want to profile

function foo()

{

echo "Hello world !\n";

};

foo();

// stop forp buffering

forp_end();

// get the stack as an array

$profileStack = forp_dump();

print_r($profileStack);

结果:

Hello world !

Array

(

[utime] => 0

[stime] => 0

[stack] => Array

(

[0] => Array

(

[file] => /home/anthony/phpsrc/php-5.3.8/ext/forp/forp.php

[function] => {main}

[usec] => 94

[pusec] => 6

[bytes] => 524

[level] => 0

)

[1] => Array

(

[file] => /home/anthony/phpsrc/php-5.3.8/ext/forp/forp.php

[function] => foo

[lineno] => 10

[usec] => 9

[pusec] => 6

[bytes] => 120

[level] => 1

[parent] => 0

)

)

)

下载地址:https://gitee.com/mirrors/forp

3、Belt(PHP 开发工具)

Belt 是 PHP 便捷开发工具。

Belt 主要特性:

60+ 的有用函数。

经过完整的测试。

代码清晰明了,文档齐全。

Belt 包括:

boolean isDate(mixed $value)

boolean isNumber(mixed $value)

boolean isString(mixed $value)

boolean isFunction(mixed $value)

boolean isEmpty(mixed $value)

boolean isEqual(mixed $left, mixed $right)

boolean isBoolean(mixed $value)

boolean isObject(mixed $value)

boolean isArray(mixed $value)

boolean isTraversable(mixed $value)

boolean isNull(mixed $value)

boolean has(mixed $object, string $key)

array keys(mixed $object)

array values(mixed $object)

array methods(mixed $object)

mixed copy(mixed $value)

mixed extend(mixed $source, mixed $destination)

mixed apply(mixed $object, Closure $closure)

mixed defaults(mixed $object, array|mixed $defaults)

string escape(string $string)

string id(string $prefix = '')

mixed with(mixed $value)

void times(integer $number, Closure $closure)

mixed cache(Closure $closure)

mixed wrap(Closure $closure, Closure $wrapper)

mixed compose(array $closures, array $arguments = array())

void once(Closure $closure)

mixed after(integer $number, Closure $closure)

mixed|array first(array $elements, integer $amount = 1)

array initial(array $elements, integer $amount = 1)

array rest(array $elements, integer $index = 1)

mixed|array last(array $elements, integer $amount = 1)

array pack(array $elements)

array flatten(array $elements)

array range(integer $to, integer $from = 0, integer $step = 1)

array difference(array $one, array $another)

array unique(array $elements, Closure $iterator = null)

array without(array $elements, array $ignore)

array zip(array $one, array $another)

integer indexOf(array $elements, mixed $element)

array intersection(array $one, array $another)

array union(array $one, array $another)

void each(array $collection, Closure $iterator)

array map(array $collection, Closure $iterator)

array toArray(mixed $value)

integer|null size(array|Countable $value)

array shuffle(array $collection)

boolean any(array $collection, Closure $iterator)

boolean all(array $collection, Closure $iterator)

array reject(array $collection, Closure $iterator)

array pluck(array $collection, string $key)

boolean contains(array $collection, mixed $value)

array invoke(array $collection, string $function)

mixed reduce(array $collection, Closure $iterator, mixed $initial = 0)

array sortBy(array $collection, Closure $iterator)

array groupBy(array $collection, Closure $iterator)

mixed max(array $collection)

mixed min(array $collection)

简单示例:

use Belt\Belt;

Belt::max([1, 2, 3]) // => 3

Belt::flatten([1, [2, [3]]]) // => [1, 2, 3]

Belt::last([1, 2, 3], 2) // => [2, 3]

安装:

如果您想尝试一下,请运行:

php composer.phar require "ilya/belt:~2"

这会将Belt作为Composer依赖项添加到您的项目中。

下载地址:https://github.com/ilya-dev/belt

4、Identity Toolkit PHP Client(PHP 客户端库)

Identity Toolkit PHP Client 是谷歌标识工具包服务的 PHP 客户端库。

示例代码:

require_once __DIR__ . '/vendor/autoload.php';

$gitkitClient = Gitkit_Client::createFromFile("gitkit-server-config.json");

// ---- upload account -----

$hashKey = "\x01\x02\x03";

$gitkitClient->uploadUsers('HMAC_SHA1', $hashKey, createNewUsers($hashKey));

// --- verify gitkit token ----

$user = 

$gitkitClient->validateToken("eyJhb...");

// ---- get account info by user identifier ----

$user = $gitkitClient->getUserById("1234");

// ---- get a url to send to user's email address to verify ownership -----

$verificationLink = $gitkitClient->getEmailVerificationLink("1234@example.com");

// ---- download account ----$iterator = $gitkitClient->getAllUsers(3);

while ($iterator->valid()) {  $user = $iterator->current();  

// $user is a Gitkit_Account object  $iterator->next();}

// ---- delete account ----

$gitkitClient->deleteUser('1234');

function createNewUsers($hashKey) {  

$allUsers = array();  

$gitkitUser = new Gitkit_Account();  

$gitkitUser->setEmail("1234@example.com");  

$gitkitUser->setUserId("1234");  

$salt = "\05\06\07";  

$password = '1111';  

$gitkitUser->setSalt($salt);  

$gitkitUser->setPasswordHash(hash_hmac('sha1', $password . $salt, $hashKey, true));

array_push($allUsers, $gitkitUser);  

$gitkitUser = new Gitkit_Account();  

$gitkitUser->setEmail('5678@example.com');  

$gitkitUser->setUserId('5678');  

$salt = "\15\16\17";  

$password = '5555';  

$gitkitUser->setSalt($salt);  

$gitkitUser->setPasswordHash(hash_hmac('sha1', $password . $salt, $hashKey, true));  

array_push($allUsers, $gitkitUser);  return $allUsers;}

下载地址:https://github.com/google/identity-toolkit-php-client

注明

以上就是PHP开发工具Yaconf、forp、Belt、Identity Toolkit PHP Client的介绍内容,这些PHP开发工具都能使用在Linux操作系统中。

栏目相关文章