bingo 发布的文章

PHP 异常处理

PHP中什么是异常:
  程序在运行中出现不符合预期的情况,允许发生(你也不想让他出现不正常的情况)但他是一种不正常的情况,按照我们的正常逻辑本不该出的错误,但仍然会出现的错误,属于逻辑和业务流程的错误,而不是编译或者语法上的错误。

  PHP中什么是错误:
  属于php脚本自身的问题,大部分情况是由错误的语法,服务器环境导致,使得编译器无法通过检查,甚至无法运行的情况。warning、notice都是错误,只是他们的级别不同而已,并且错误是不能被try-catch捕获的。

**https://www.cnblogs.com/zyf-zhaoyafei/p/6928149.html**

Try, throw 和 catch简介:

Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"
Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象

设置顶级异常处理:set_exception_handler('myException');
创建自定义异常处理:创建自定义的异常处理程序,该类必须是 exception 类的一个扩展。

    Exception {
/* 属性 */
protected string $message ;
protected int $code ;
protected string $file ;
protected int $line ;
/* 方法 */
public __construct ([ string $message = "" [, int $code = 0 [, Throwable $previous = NULL ]]] )
final public string getMessage ( void )
final public Throwable getPrevious ( void )
final public int getCode ( void )
final public string getFile ( void )
final public int getLine ( void )
final public array getTrace ( void )
final public string getTraceAsString ( void )
public string __toString ( void )
final private void __clone ( void )
}

上为系统异常类的基础方法.

PHP 错误报警级别:

值 常量 描述
2 E_WARNING 非致命的 run-time 错误。不暂停脚本执行。
8 E_NOTICE Run-time 通知。脚本发现可能有错误发生,但也可能在脚本正常运行时发生。
256 E_USER_ERROR 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。
512 E_USER_WARNING 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。
1024 E_USER_NOTICE 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。
4096 E_RECOVERABLE_ERROR 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler())
8191 E_ALL 所有错误和警告,除级别 E_STRICT 以外。(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分)

Mysql NULL 和 ''

陷阱一:空值不一定为空

  空值是一个比较特殊的字段。在MySQL数据库中,在不同的情形下,空值往往代表不同的含义。这是MySQL数据库的一种特性。如在普通的字段中(字符型的数据),空值就是表示空值。但是如果将一个空值的数据插入到TimesTamp类型的字段中,空值就不一定为空。此时为出现什么情况呢

  我先创建了一个表。在这个表中有两个字段:User_id(其数据类型是int)、Date(其数据类型是TimesTamp)。现在往这个表中插入一条记录,其中往Date字段中插入的是一个NULL空值。可是当我们查询时,其结果显示的却是插入记录的当前时间。这是怎么一回事呢?其实这就是在MySQL数据库中执行SQL语句时经常会遇到的一个陷阱:空值不一定为空。在操作时,明明插入的是一个空值的数据,但是最后查询得到的却不是一个空值。

  在MySQL数据库中,NULL对于一些特殊类型的列来说,其代表了一种特殊的含义,而不仅仅是一个空值。对于这些特殊类型的列,各位读者主要是要记住两个。一个就是笔者上面举的TimesTamp数据类型。如果往这个数据类型的列中插入Null值,则其代表的就是系统的当前时间。另外一个是具有auto_increment属性的列。如果往这属性的列中插入Null值的话,则系统会插入一个正整数序列。而如果在其他数据类型中,如字符型数据的列中插入Null的数据,则其插入的就是一个空值。

  陷阱二:空值不一定等于空字符

  在MySQL中,空值(Null)与空字符(’’)相同吗?答案是否定的。

  在同一个数据库表中,同时插入一个Null值的数据和一个’’空字符的数据,然后利用Select语句进行查询。显然其显示的结果是不相同的。从这个结果中就可以看出,空值不等于空字符。这就是在MySQL中执行SQL语句遇到的第二个陷阱。在实际工作中,空值数据与空字符往往表示不同的含义。数据库管理员可以根据实际的需要来进行选择。如对于电话号码等字段,可以默认设置为空值(表示根本不知道对方的电话号码)或者设置为空字符(表示后来取消了这个号码)等等。由于他们在数据库中会有不同的表现形式,所以数据库管理员需要区别对待。笔者更加喜欢使用空值,而不是空字符。这主要是因为针对空值这个数据类型有几个比较特殊的运算字符。如果某个字段是空字符,数据库中是利用字段名称来代替。相反,如果插入的是空值,则直接显示的是NULL。这跟其他数据库的显示方式也是不同的。

  一是IS NULL 和IS NOT NULL关键字。如果要判断某个字段是否含用空值的数据,需要使用特殊的关键字。其中前者表示这个字段为空,后者表示这个字段为非空。在Select语句的查询条件中这两个关键字非常的有用。如需要查询所有电话号码为空的用户(需要他们补充电话号码信息),就可以在查询条件中加入is not null关键字。

  二是Count等统计函数,在空值上也有特殊的应用。如现在需要统计用户信息表中有电话号码的用户数量,此时就可以使用count函数、同时将电话号码作为参数来使用。因为在统计过程中,这个函数会自动忽略空值的数据。此时统计出来的就是有电话号码的用户信息。如果采用的是空字符的数据,则这个函数会将其统计进去。统计刚才建立的两条记录时,系统统计的结果是1,而不是2。可见系统自动将Null值的数据忽略掉了。

判断NULL用is null 或者 is not null。 sql语句里可以用ifnull函数来处理
判断空字符串‘’,要用 ='' 或者 <>''。sql语句里可以用if(col,col,0)处理,即:当col为true时(非null,及非'')显示,否则打印0

来至某一处:
首先,我们要搞清楚“空值” 和 “NULL” 的概念:
1、空值是不占用空间的
2、mysql中的NULL其实是占用空间的,下面是来自于MYSQL官方的解释
“NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.”
PS:打个比方来说,你有一个杯子,空值代表杯子是真空的,NULL代表杯子中装满了空气,虽然杯子看起来都是空的,但是区别是很大的。

PHP7 新特性

  1. 运算符(NULL 合并运算符)

$a = $_GET['a'] ?? 1;

相当于:

$a = isset($_GET['a']) ? $_GET['a'] : 1;

我们知道三元运算符是可以这样用的:

$a ?: 1

但是这是建立在 $a 已经定义了的前提上。新增的 ?? 运算符可以简化判断。

  1. 函数返回值类型声明

function arraysSum(array ...$arrays): array

{

  return array_map(function(array $array): int {

    return array_sum($array);

  }, $arrays);

}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

以上例程会输出:

Array
(

[0] => 6
[1] => 15
[2] => 24

)

强制模式:

function foo($a) : int

{

  return $a;

}

foo(1.0);

以上代码可以正常执行,foo 函数返回 int 1,没有任何错误。

严格模式:

declare(strict_types=1);

function foo($a) : int

{

  return $a;

}

foo(1.0);

PHP Fatal error: Uncaught TypeError: Return value of foo() must be of the type integer, float returned in test.php:6

在声明之后,就会触发致命错误。

  1. 标量类型声明

PHP 7 中的函数的形参类型声明可以是标量了。在 PHP 5 中只能是类名、接口、array 或者 callable (PHP 5.4,即可以是函数,包括匿名函数),现在也可以使用 string、int、float和 bool 了。

官方示例:

// Coercive mode

function sumOfInts(int ...$ints)

{

  return array_sum($ints);

}

var_dump(sumOfInts(2, '3', 4.1));

以上例程会输出:

int(9)
需要注意的是上文提到的严格模式的问题在这里同样适用:强制模式(默认,既强制类型转换)下还是会对不符合预期的参数进行强制类型转换,严格模式下则触发 TypeError 的致命错误。

  1. use 批量声明

PHP 7 中 use 可以在一句话中声明多个类或函数或 const 了:

use some/namespace/{ClassA, ClassB, ClassC as C};

use function some/namespace/{fn_a, fn_b, fn_c};

use const some/namespace/{ConstA, ConstB, ConstC};

但还是要写出每个类或函数或 const 的名称(并没有像 python 一样的 from some import * 的方法)。

需要留意的问题是:如果你使用的是基于 composer 和 PSR-4 的框架,这种写法是否能成功的加载类文件?其实是可以的,composer 注册的自动加载方法是在类被调用的时候根据类的命名空间去查找位置,这种写法对其没有影响。

  1. 太空舱操作符(组合比较操作符)

太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1。 比较的原则是沿用 PHP 的常规比较规则进行的。

// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1

// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1

  1. 通过 define() 定义常量数组

Array 类型的常量现在可以通过 define() 来定义。在 PHP5.6 中仅能通过 const 定义。

define('ANIMALS', [

'dog',
'cat',
'bird'

]);

echo ANIMALS[1]; // outputs "cat"
?>

  1. 迭代器

通过添加 yield 关键字支持了 generators,Generators 提供了一个更简单的方法实现迭代器,不需要实现 Iterator 接口

$gen = (function() {

yield 1;
yield 2;

return 3;

})();

foreach ($gen as $val) {

echo $val, PHP_EOL;

}

echo $gen->getReturn(), PHP_EOL;

以上例程会输出:

1
2
3

  1. 匿名类

现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义。

interface Logger {

public function log(string $msg);

}

class Application {

private $logger;

public function getLogger(): Logger {
     return $this->logger;
}

public function setLogger(Logger $logger) {
     $this->logger = $logger;
}

}

$app = new Application;
$app->setLogger(new class implements Logger {

public function log(string $msg) {
    echo $msg;
}

});

var_dump($app->getLogger());
以上例程会输出:

object(class@anonymous)#2 (0) {
}

详细文档可以参考 匿名类.

  1. 闭包 Closure::call()

Closure::call() 现在有着更好的性能,简短干练的暂时绑定一个方法到对象上闭包并调用它。

class A {private $x = 1;}

// Pre PHP 7 code
$getXCB = function() {return $this->x;};
$getX = $getXCB->bindTo(new A, 'A'); // intermediate closure
echo $getX();

// PHP 7+ code
$getX = function() {return $this->x;};
echo $getX->call(new A);

以上例程会输出:

1
1

Explain

763020-20160417142105895-121211600.png

1)、id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询。

2)、select_type列常见的有:
A:simple:表示不需要union操作或者不包含子查询的简单select查询。有连接查询时,外层的查询为simple,且只有一个
B:primary:一个需要union操作或者含有子查询的select,位于最外层的单位查询的select_type即为primary。且只有一个
C:union:union连接的两个select查询,第一个查询是dervied派生表,除了第一个表外,第二个以后的表select_type都是union
D:dependent union:与union一样,出现在union 或union all语句中,但是这个查询要受到外部查询的影响
E:union result:包含union的结果集,在union和union all语句中,因为它不需要参与查询,所以id字段为null
F:subquery:除了from字句中包含的子查询外,其他地方出现的子查询都可能是subquery
G:dependent subquery:与dependent union类似,表示这个subquery的查询要受到外部表查询的影响
H:derived:from字句中出现的子查询,也叫做派生表,其他数据库中可能叫做内联视图或嵌套select

3)、table
显示的查询表名,如果查询使用了别名,那么这里显示的是别名,如果不涉及对数据表的操作,那么这显示为null,如果显示为尖括号括起来的<derived N>就表示这个是临时表,后边的N就是执行计划中的id,表示结果来自于这个查询产生。如果是尖括号括起来的<union M,N>,与<derived N>类似,也是一个临时表,表示这个结果来自于union查询的id为M,N的结果集。

4)、type
依次从好到差:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL,除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一个索引
A:system:表中只有一行数据或者是空表,且只能用于myisam和memory表。如果是Innodb引擎表,type列在这个情况通常都是all或者index
B:const:使用唯一索引或者主键,返回记录一定是1行记录的等值where条件时,通常type是const。其他数据库也叫做唯一索引扫描
C:eq_ref:出现在要连接过个表的查询计划中,驱动表只返回一行数据,且这行数据是第二个表的主键或者唯一索引,且必须为not null,唯一索引和主键是多列时,只有所有的列都用作比较时才会出现eq_ref
D:ref:不像eq_ref那样要求连接顺序,也没有主键和唯一索引的要求,只要使用相等条件检索时就可能出现,常见与辅助索引的等值查找。或者多列主键、唯一索引中,使用第一个列之外的列作为等值查找也会出现,总之,返回数据不唯一的等值查找就可能出现。
E:fulltext:全文索引检索,要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引
F:ref_or_null:与ref方法类似,只是增加了null值的比较。实际用的不多。
G:unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值
H:index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值,可以使用索引将子查询去重。
I:range:索引范围扫描,常见于使用>,<,is null,between ,in ,like等运算符的查询中。
J:index_merge:表示查询使用了两个以上的索引,最后取交集或者并集,常见and ,or的条件使用了不同的索引,官方排序这个在ref_or_null之后,但是实际上由于要读取所个索引,性能可能大部分时间都不如range
K:index:索引全表扫描,把索引从头到尾扫一遍,常见于使用索引列就可以处理不需要读取数据文件的查询、可以使用索引排序或者分组的查询。
L:all:这个就是全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录。

5)、possible_keys
查询可能使用到的索引都会在这里列出来

6)、key
查询真正使用到的索引,select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个。

7)、key_len
用于处理查询的索引长度,如果是单列索引,那就整个索引长度算进去,如果是多列索引,那么查询不一定都能使用到所有的列,具体使用到了多少个列的索引,这里就会计算进去,没有使用到的列,这里不会计算进去。留意下这个列的值,算一下你的多列索引总长度就知道有没有使用到所有的列了。要注意,mysql的ICP特性使用到的索引不会计入其中。另外,key_len只计算where条件用到的索引长度,而排序和分组就算用到了索引,也不会计算到key_len中。

8)、ref
如果是使用的常数等值查询,这里会显示const,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func

9)、rows
这里是执行计划中估算的扫描行数,不是精确值

10)、extra
这个列可以显示的信息非常多,有几十种,常用的有
A:distinct:在select部分使用了distinc关键字
B:no tables used:不带from字句的查询或者From dual查询
C:使用not in()形式子查询或not exists运算符的连接查询,这种叫做反连接。即,一般连接查询是先查询内表,再查询外表,反连接就是先查询外表,再查询内表。
D:using filesort:排序时无法使用到索引时,就会出现这个。常见于order by和group by语句中
E:using index:查询时不需要回表查询,直接通过索引就可以获取查询的数据。
F:using join buffer(block nested loop),using join buffer(batched key accss):5.6.x之后的版本优化关联查询的BNL,BKA特性。主要是减少内表的循环数量以及比较顺序地扫描查询。
G:using sort_union,using_union,using intersect,using sort_intersection:
using intersect:表示使用and的各个索引的条件时,该信息表示是从处理结果获取交集
using union:表示使用or连接各个使用索引的条件时,该信息表示从处理结果获取并集
using sort_union和using sort_intersection:与前面两个对应的类似,只是他们是出现在用and和or查询信息量大时,先查询主键,然后进行排序合并后,才能读取记录并返回。
H:using temporary:表示使用了临时表存储中间结果。临时表可以是内存临时表和磁盘临时表,执行计划中看不出来,需要查看status变量,used_tmp_table,used_tmp_disk_table才能看出来。
I:using where:表示存储引擎返回的记录并不是所有的都满足查询条件,需要在server层进行过滤。查询条件中分为限制条件和检查条件,5.6之前,存储引擎只能根据限制条件扫描数据并返回,然后server层根据检查条件进行过滤再返回真正符合查询的数据。5.6.x之后支持ICP特性,可以把检查条件也下推到存储引擎层,不符合检查条件和限制条件的数据,直接不读取,这样就大大减少了存储引擎扫描的记录数量。extra列显示using index condition
J:firstmatch(tb_name):5.6.x开始引入的优化子查询的新特性之一,常见于where字句含有in()类型的子查询。如果内表的数据量比较大,就可能出现这个
K:loosescan(m..n):5.6.x之后引入的优化子查询的新特性之一,在in()类型的子查询中,子查询返回的可能有重复记录时,就可能出现这个

除了这些之外,还有很多查询数据字典库,执行计划过程中就发现不可能存在结果的一些提示信息

11)、filtered
使用explain extended时会出现这个列,5.7之后的版本默认就有这个字段,不需要使用explain extended了。这个字段表示存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例,注意是百分比,不是具体记录数。

作者:小萝卜

出处:小萝卜的博客 http://www.cnblogs.com/xiaoboluo768/

感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。

CGI、FastCGI和PHP-FPM关系图解[转]

806469-20160927081043813-1021846367.png
806469-20160927081047438-329876066.png

当Web Server收到 index.php 这个请求后,会启动对应的 CGI 程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程,Web server再把结果返回给浏览器。这就是一个完整的动态PHP Web访问流程,接下来再引出这些概念,就好理解多了.

CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。
FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。
PHP-CGI:是 PHP (Web Application)对 Web Server 提供的 CGI 协议的接口程序。
PHP-FPM:是 PHP(Web Application)对 Web Server 提供的 FastCGI 协议的接口程序,额外还提供了相对智能一些任务管理。
Web Server: 一般指Apache、Nginx、IIS、Lighttpd、Tomcat等服务器,
Web Application: 一般指PHP、Java、Asp.net等应用程序。
806469-20160927081051563-2122907811

Web Server启动时载入FastCGI进程管理器(Apache Module或IIS ISAPI等)
FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可建多个php-cgi),并等待来自Web Server的连接。
当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
FastCGI子进程完成处理后,将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待,并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
FastCGI与CGI特点:

对于CGI来说,每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展,并重初始化全部数据结构。而使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
由于FastCGI是多进程,所以比CGI多线程消耗更多的服务器内存,php-cgi解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。
806469-20160927081052328-1825068850.png

1、CGI是公共网关接口,是HTTP服务与其它程序“交谈”的工具。
2、fastcgi是一个常驻行 CGI ,是CGI的一个扩展,让CGI解释器常驻内存,提供性能。
3、php-cgi是fastcgi的php版本。
4、php-fpm是php-cgi的管理器,能够实现平滑更改php.ini的配置。

转载

PHP 插件扩展大全


国外程序员整理的 PHP 资源大全



ziadoz 在 Github 发起维护的一个 PHP 资源列表,内容包括:库、框架、模板、安全、代码分析、日志、第三方库、配置工具、Web 工具、书籍、电子书、经典博文等等。



依赖管理



依赖和包管理库



Composer/Packagist:一个包和依赖管理器



Composer Installers:一个多框架Composer库安装器



Pickle:一个PHP扩展安装器







其他的依赖管理



其他的相关依赖管理



Satis:一个静态Composer存储库生成器



Composition:一个在运行时检查Composer环境的库



Version:语义版本的解析和比较库



NameSpacer -转化下划线到命名空间的库



Patch Installer -使用Composer安装补丁的库



Composer Checker -校验Composer配置的工具







框架



Web开发框架



Symfony2 -一个独立组件组成的框架



-另一个由独立组件组成的框架



Laravel 4 -另一个PHP框架



Aura PHP -独立组件的框架



Yii2 – 另一个PHP框架



Nette – 另一个由个体组件组成的框架



PPI fr<x>amework 2 -一个互操作性框架



Phalcon -通过C扩展实现的框架







其他框架



其他Web开发框架



Symfony CMF – 创建自定义CMS的内容管理框架



Knp RAD Bundle -Symfony 2的快速应用程序(RAD)包







框架组件



来自web开发框架的独立组件



Symfony2 Components -Symfony2组件



-ZF2组件



Aura Components -PHP5.4组件包



Hoa Project -另一个PHP组件包







微型框架



微型框架和路由



Silex – 基于Symfony2组件的微型框架



– 另一个简单的微型框架



Bullet PHP -用于构建REST APIs的微型框架



Fast Route – 快速路由库



Pux -另一个快速路由库







其他微型框架



其他相关的微型框架和路由



Silex Skeleton -Silex的项目架构



Silex Web Profiler -Silex web调试工具条



Stack – Silex/Symfony的可堆叠中间件库



Slim Skeleton -Slim架构



Slim View -Slim的自定义视图集合



Slim Middleware -Slim的自定义中间件集合







模板



模板化和词法分析的库和工具



Twig -一个全面的模板语言



Twig Cache Extension -一个用于Twig的模板片段缓存库



Mustache -一个Mustache模板语言的PHP实现



Phly Mustache -另一个Mustache模板语言的PHP实现



MtHaml – 一个HAML 模板语言的PHP实现



PHPTAL -一个 TAL 模板语言的PHP实现



Plates -一个原生PHP模板



Lex -一个轻量级模板解析器







静态站点生成器



预处理工具来生成web页面的内容。



Sculpin -转换Markdown和Twig为静态HTML的工具



Phrozn – 另一个转换Textile,Markdown和Twig为HTML的工具







HTTP



用于HTTP和网站爬取的库



Guzzle -一个全面的HTTP客户端



Buzz -另一个HTTP客户端



Requests -一个简单的HTTP库



HTTPFul -一个链式HTTP库



Goutte -一个简单的web爬取器



PHP VCR -录制和重放HTTP请求的库







URL



解析URL的库



Purl -一个URL处理库



PHP Domain Parser -一个本地前缀解析库







Email



发送和解析邮件的库



SwiftMailer – 一个邮件解决方案



PHPMailer – 另一个邮件解决方案



Fetch -一个IMAP库



Email Reply Parser -一个邮件回复解析库



Stampie -邮件服务库,不如 SendGrid, PostMark, MailGunMandrill.



-一个在邮件模板内联CSS的库







文件



文件处理和MIME类型检测库



Gaufrette -一个文件系统抽象层



Flysystem – 另一个文件系统抽象层



Canal -一个检测互联网媒体类型的库



Apache MIME Types -一个解析Apache MIME类型的库



Ferret – 一个MIME检测库



Hoa Mime -另一个MIME检测库



Lurker -一个资源跟踪库



PHP File Locator -一个在大型项目定位文件的库



PHP FFmpeg -一个用于FFmpeg 视频包装的库.



CSV – 一个CSV数据处理库







Streams 流



处理流的库



Streamer – 一个面向对象的流包装库







Dependency Injection依赖注入



实现依赖注入设计模式的库



Pimple – 一个小的依赖注入容器



Auryn – 另一个依赖注入容器



Orno Di -另一个可伸缩的依赖注入容器



PHP DI -一个使用注释实现的依赖注入



Acclimate -一个依赖注入容器和服务定位的通用接口







Imagery 图像



处理图像的库



Imagine -一个图像处理库



PHP Image Workshop -另一个图像处理库



Intervention Image -另一个图像处理库



-一个提取GIF动画帧信息的库



GIF Creator – 一个通过多张图片创建GIF动画的库



Image With Text -一个在图像中嵌入文本的库



Color Extractor -一个从图像中提取颜色的库







Testing 测试



测试代码和生成测试数据的库



PHPUnit -一个单元测试框架



DBUnit -PHPUnit的数据库测试库



ParaTest – PHPUnit的并行测试库



PHPSpec -基于功能点设计的单元测试库



Codeception -一个全栈测试框架



AspectMock – PHPUnit/ Codeception 模拟框架。



Atoum -一个简单的测试库



Mockery -一个用测试的模拟对象库



Phake -另一个用测试的模拟对象库



Prophecy -一个可选度很高的模拟框架



Faker -一个伪数据生成库



Samsui – 另一个伪数据生成库



Alice -富有表现力的一代库



Behat -一个行为驱动开发(BDD)测试框架



Pho -一个行为驱动开发测试框架



Mink -Web验收测试



HTTP Mock – 一个在单元测试模拟HTTP请求的库



VFS Stream -一个用于测试的虚拟文件系统流的包装器



VFS -另一个用于测试虚拟文件系统



Locust -一个用Python编写的现代加载测试库







Continuous Integration 持续集成



持续集成的库和应用



Travis CI – 一个持续集成平台



PHPCI -一个PHP的开源持续集成平台



Sismo – 一个持续测试服务库



Jenkins一个 PHP 支持的持续集成平台



JoliCi – 一个用PHP编写的由Docker支持的持续集成客户端







Documentation 文档



生成项目文档的库



Sami -一个API文档生成器



APIGen -另一个API文档生成器



PHP Documentor 2 -一个API文档生成器



phpDox – 一个PHP项目的文档生成器(不限于API文档)







Security 安全



生成安全的随机数,加密数据,扫描漏洞的库



HTML Purifier -一个兼容标准的HTML过滤器



RandomLib -一个生成随机数和字符串的库



True Random -使用 www.random.org生成随机数的库



SecurityMultiTool -一个PHP安全库



PHPSecLib -一个纯PHP安全通信库



TCrypto -一个简单的键值加密存储库



PHP IDS – 一个结构化的PHP安全层



PHP SSH -一个试验的面向对象的SSH包装库



IniScan -一个扫描PHP INI文件安全的库



SensioLabs Security Check -一个为检查Composer依赖提供安全建议的web工具



Zed – 一个集成的web应用渗透测试工具







Passwords 密码



处理和存储密码的库和工具



Password Compat -一个新的PHP5.5密码函数的兼容库



phpass – 一个便携式的密码哈希框架



PHP Password Lib -一个生成和校验密码的库



Password Policy – 一个PHP和ja<x>vasc<x>ript的密码策略库



Password Validator – 校验和升级密码哈希的库



Zxcvbn PHP -一个基于Zxcvbn JS的现实的PHP密码强度估计库







Code Analysis 代码分析



分析,解析和处理代码库的库的工具



PHP Parser -一个PHP编写的PHP解析器



PHPPHP – 一个PHP实现的PHP虚拟机



PHPSandbox -一个PHP沙盒环境



Dissect -一个词法和语法分析的工具集合



PHP Mess Detector -一个扫描代码缺陷,次优代码,未使用的参数等等的库。



PHP Code Sniffer -一个检测PHP、CSS和JS代码标准冲突的库



PHPCPD – 一个检测复制和粘贴代码的库



PHP Analyser -一个分析PHP代码查找缺陷和错误的库



PHP CS Fixer – 一个编码标准库



PHP Manipulator -一个分析和修改PHP源代码的库



PHP Metrics -一个静态测量库



PHP Refactoring Browser -一个重构PHP代码的命令行工具集



UBench – 一个简单的微型基准检测库



Athletic -一个基于注释的基准检测库



Mondrian – 使用使用图论的代码分析工具



Scrutinizer -一个审查PHP代码的web工具



PHPLOC -一个快速测量PHP项目大小的工具



xHprof -另一个PHP分析工具



-一个帮助遵守特定的编码惯例的工具。







Debugging 调试



调试代码的库和工具



xDebug -一个调试和分析PHP的工具



PHP Debug Bar – 一个调试工具栏



PHP Console -一个web调试控制台



Barbushin PHP Console -另一个使用Google Chrome的web调试控制台



PHPDBG – 一个交互的PHP调试器



Tracy -一个简单的错误检测,写日志和时间测量库







Build Tools 构建工具



项目构建和自动化工具



Go -一个简单的PHP构建工具



Bob – 一个简单的项目自动化工具



Phake -一个PHP克隆库



Box – 一个构建PHAR文件的工具



Phing -一个灵感来自于Apache Ant的PHP项目构建系统







Task Runners 任务运行器



自动运行任务的库



Task -一个灵感来源于Grunt和Gulp的纯PHP任务运行器



Robo -一个面向对象配置的PHP任务运行器



Bldr -一个构建在Symfony组件上的PHP任务运行器







Navigation导航



构建导航结构的工具



KnpMenu – 一个菜单库



Cartographer -一个站点地图生成库







Asset Management 资源管理



管理,压缩和最小化web站点资源的工具



Assetic – 一个资源管理的管道库



Pipe -另一个资源管理的管道库



Munee -一个资源优化库



JShrink -一个ja<x>vasc<x>ript最小化库



Puli – 一个检测资源绝对路径的库







Geolocation 地理位置



为地理编码地址和使用纬度经度的库。



GeoCoder -一个地理编码库



GeoTools -一个地理工具相关的库



PHPGeo -一个简单的地理库



GeoJSON -一个地理JSON的实现







Date and Time 日期和时间



处理日期和时间的库



Carbon – 一个简单的日期时间API扩展



ExpressiveDate -另一个日期时间API扩展



CalendR – 一个日历管理库







Event 事件



时间驱动或非阻塞事件循环实现的库



React -一个事件驱动的非阻塞I/O库



Rx.PHP – 一个reactive扩展库



Ratchet – 一个web套接字库



Hoa WebSocket -另一个web套接字库



Hoa EventSource -一个事件源库



Evenement -一个事件分发库



FuelPHP Event -另一个事件分发库







Logging 日志



生成和处理日志文件的库



Monolog – 一个全面的日志工具



KLogger -一个易用的PSR-3兼容的日志类







E-commerce 电子商务



处理支付和构建在线电子商务商店的库和应用



OmniPay -一个框架混合了多网关支付处理的库



Payum – 一个支付抽象库



Sylius – 一个开源的电子商务解决方案



Thelia -另一个开源的电子商务解决方案



Money – 一个Fowler金钱模式的PHP实现



Sebastian Money -另一个处理货币值的库



Swap -一个汇率库







PDF



处理PDF文件的库和软件



Snappy -一个PDF和图像生成器库



WKHTMLToPDF -一个将HTML转换为PDF的工具







Databa<x>se 数据库



使用对象关系映射(ORM)或数据映射技术的数据库交互库



Doctrine -一个全面的DBAL和ORM



Doctrine Extensions -一个Doctrine行为扩展的集合



Propel – 一个快速的ORM,迁移库和查询构架器



-Laravel 4 ORM



Baum -一个Eloquent的嵌套集实现



Spot2 -一个MySQL的ORM映射器



RedBean -一个轻量级,低配置的ORM



Pomm -一个PostgreSQL对象模型管理器



ProxyManager -一个为数据映射生成代理对象的工具集







Migrations 迁移



帮助管理数据库模式和迁移的库



PHPMig -另一个迁移管理库



Phinx – 另一个数据库迁移管理库



Migrations -一个迁移管理库



Doctrine Migrations -一个Doctrine迁移库







NoSQL



处理NoSQL后端的库



MongoQB -一个MongoDB查询构建库



Monga -一个MongoDB抽象库



Predis – 一个功能完整的Redis库







Queue 队列



处理事件和任务队列的库



Pheanstalk -一个Beanstalkd 客户端库



PHP AMQP -一个纯PHP AMQP库



Thumper – 一个RabbitMQ模式库



Bernard -一个多后端抽象库







Search 搜索



在数据上索引和执行查询的库和软件



ElasticSearch PHP -ElasticSearch的官方客户端库



Elastica -ElasticSearch的客户端库



Solarium -Solr的客户端库



SphinxQL query builder -Sphinx搜索引擎的的查询库







Command Line 命令行



构建命令行工具的库



Boris – 一个微型PHP REPL



PsySH – 另一个微型PHP REPL



Pecan -一个事件驱动和非阻塞内核



GetOpt – 一个命令行选择解析器



OptParse -另一个命令行选择解析器



Commando -另一个简单的命令行选择解析器



GetOptionKit -另一个命令行选择解析器



-计算cron运行日期的库



ShellWrap -一个简单的命令行包装库



Hoa Console -另一个命令行库



Shunt – 一个在多台远程机器上并行运行命令行的库



Cilex -一个构建命令行工具的微型框架







Authentication 身份验证



实现身份验证的库



Sentry -一个混合的身份验证和授权的框架库



Sentry Social -一个社交网络身份验证库



Opauth -一个多渠道的身份验证框架



OAuth2 -一个OAuth2身份验证服务,资源服务器和客户端库



OAuth2 Server -另一个OAuth2服务器实现



PHP oAuthLib -另一个OAuth库



TwitterOAuth -一个Twitter OAuth库



TwitterSDK -一个完全测试的Twitter SDK



Hawk -一个Hawk HTTP身份认证库



HybridAuth -一个开源的社交登陆库







Markup 标记



处理标记的库



Decoda -一个轻量级标记解析库



PHP Markdown -一个Markdown解析器



CommonMark PHP -一个对 CommonMark spec全支持的Markdown解析器



Dflydev Markdown -另一个Markdown解析器



Parsedown -另一个Markdown解析器



Ciconia – 另一个支持Github Markdown风格的Markdown解析器



Cebe Markdown -一个快速的可扩展的Markdown解析器



HTML5 PHP – 一个HTML5解析和序列化库







Strings 字符串



解析和处理字符串的库



ANSI to HTML5 -ANSI到HTML5的转化库



Patchwork UTF-8 -一个处理UTF-8字符串的便携库



Hoa String -另一个UTF-8字符串库



Stringy -一个多字节支持的字符串处理库



Color Jizz -处理和转换颜色的库



UUID – 生成UUIDs的库



Slugify -转换字符串到slug的库



Urlify – 一个Django的 URLify.jsPHP通道



Text – 一个文本处理库



SQL Formatter -一个格式化SQL语句的库



UA Parser – 一个解析用户代理字符串的库







Numbers 数字



处理数字的库



Numbers PHP -处理数字的库



Math -处理大数字的库



ByteUnits – 在二进制和度量系统中解析,格式化和转换字节单元的库



PHP Units of Measure -一个计量单位转换的库



PHP Conversion – 另一个计量单位转换的库



LibPhoneNumber for PHP -Google电话号码处理的PHP实现库







Filtering and Validation 过滤和验证



过滤和验证数据的库



Filterus – 一个简单的PHP过滤库



Respect Validate -一个简单的验证库



Valitron -另一个验证库



Upload – 一个处理文件上传和验证的库



DMS Filter – 一个注释过滤库



-一个支持YAML,JSON和xm<x>l的模式验证库



ISO-codes -验证各种ISO和ZIP编码的库(IBAN, SWIFT/BIC, BBAN, VAT, SSN, UKNIN)







REST和API



开发REST-ful API的库和web工具



Apigility -一个使用Zend fr<x>amework 2构建的API构建器



Hateoas -一个HOATEOAS REST web服务库



HAL -一个超文本应用语言(HAL)构建库



Negotiation -一个内容协商库



Drest -一个将Doctrine实体暴露为REST资源节点的库



Restler -一个将PHP方法暴露为RESTful web API的轻量级框架







Caching 缓存



缓存数据的库



Alternative PHP Cache (APC) – 打开PHP伪代码缓存



Cache -一个缓存库(Doctrine部分)



Stash -另一个缓存库







数据结构和存储



实现数据结构和存储技术的库



Ardent -一个数据结构库



PHP Collections – 一个简单的集合库



Serializer -一个序列化和反序列化数据的库



-一个对象存储库



Fractal -一个转换复杂数据结构到JSON输出的库



Totem -一个管理和穿件数据交换集的库



PINQ -一个PHP实时Linq库



JsonMapper -一个将内嵌JSON结构映射为PHP类的库







Notifications 通知



处理通知软件的库



Nod -一个通知库(Growl等)



Notificato – 一个处理推送通知的库



Notification Pusher -一个设备推送通知的独立库



Notificator -一个轻量级的通知库







Deployment 部署



项目部署库



Pomander -一个PHP应用部署工具



Rocketeer -PHP世界里的一个快速简单的部署器



Envoy -一个用PHP运行SSH任务的工具



Plum – 一个部署库







国际化和本地化



国际化(I18n)和本地化(L10n)



Aura.Intl







第三方API



访问第三方API的库



Amazon Web Service SDK – PHP AWS SDK官方库



S3 Stream Wrapper -Amazon S3流包装库



Stripe -Stripe官方PHP库



Campaign Monitor -Campaign Monitor官方PHP库



Digital Ocean -Digital Ocean API 接口库



Github – Github API交互库



PHP Github API -另一个Github API交互库



Twitter OAuth -Twitter OAuth工作流交互库



Twitter REST – Twitter REST API交互库



Dropbox SDK – The official PHP Dropbox SDK library.



Dropbox SDK – Dropbox SDK官方PHP库



Twilio – The official Twilio PHP REST API.



Twilio – Twilio官方PHP REST API



Mailgun The official Mailgun PHP API.



Mailgun Mailgun官方PHP REST API







Extensions 扩展



帮组构建PHP扩展的库



Zephir -用于开发PHP扩展,且介于PHP和C++之间的编译语言



PHP CPP -一个开发PHP扩展的C++库







Miscellaneous 杂项



不在上面分类中的有用库和工具



Spork -一个处理forking的库



JSON Lint – 一个JSON lint工具



JSONPCallbackValidator -验证JSONP回调的库



Pagerfanta -一个分页库



Ruler – 一个简单的无状态的生产环境规则引擎。



LiteCQRS -一个CQRS(命令查询责任分离)库



Sslurp – 一个使得SSL处理减少的库



PHP Option一个可选的类型库



Metrics -一个简单的度量API库



– 一个解析VCard和iCalendar对象的库



Annotations -一个注释库(Doctrine部分)



Whoops -一个不错的错误处理库



Finite -一个简单的PHP有限状态机



LadyBug -一个dumper库



Procrastinator -运行耗时任务的库



Compose -一个功能组合库



SuperClosure -一个允许闭包序列化的库



Jumper – 一个远程服务执行库



Underscore -一个Undersccore JS库的PHP实现



PHP PassBook -一个iOS PassBook PHP库



-一个PHP表达式语言



RMT – 一个编写版本和发布软件的库



Wise – 一个配置管理器



Opengraph -一个开放图库



Essence -一个提取web媒体的库



Embera -一个Oem<x>bed消费库



Graphviz -一个图形库



Monad PHP 一个简单Monad库



Flux -一个正则表达式构建库



Patchwork – 一个重新定义用户的函数库



Galapagos -语言转换进化



Design Patterns PHP -一个使用PHP实现的设计模式存储库



PHPCR – 一个Java内容存储库(JCR)的PHP实现



Functional PHP – 一个函数式编程库



ClassPreloader – 一个优化自动加载的库



Lib Country -一个国家和地区数据的库



Lib Accessor -一个简化访问的库



PHPStack -一个PHP编写的TCP/IP栈概念



Nmap -一个Nmap PHP包装器



Code Mover -一个移动代码的库



Iter -一个使用生成器提供迭代原语的库



Lambda PHP -一个PHP中的Lambda 计算解析器



Country List – 所有带有名称和ISO 3166-1编码的国家列表



PHP-GPIO – 用于Raspberry PI的GPIO pin的库



print_o – 一个对象图的可视化器



Alias -一个类别名库







Software 软件



创建一个开发环境的软件



PHP安装



在你的电脑上帮助安装和管理PHP的工具



HomeBrew -一个OSX包管理器



HomeBrew PHP -一个HomeBrew的PHP通道



PHP OSX – 一个OSX下的PHP安装器



PHP Brew -一个PHP版本管理和安装器



PHP Env – 另一个PHP版本管理器



PHP Switch – 另一个PHP版本管理器



PHP Build – 另一个PHP版本安装器



VirtPHP – 一个创建和管理独立PHP环境的工具







Development Environment 开发环境



创建沙盒开发环境的软件和工具



Vagrant -一个便携的开发环境工具



Ansible – 一个非常简单的编制框架



Puppet -一个服务器自动化框架和应用



PuPHPet -一个构建PHP开发虚拟机的web工具



Protobox -另一个构建PHP开发虚拟机的web工具



Phansible – 一个用Ansible构建PHP开发虚拟机的web工具







Virtual Machines 虚拟机



相关的PHP虚拟机



HipHop PHP -Facebook出品的PHP虚拟机,运行时和JIT



HippyVM -另一个PHP虚拟机



Hack – 一个PHP进行无缝操作的 HHVM编程语言



IDE 集成开发环境



支持PHP的集成开发环境



Netbeans -一个支持PHP和HTML5的IDE



Eclipse for PHP Developers -一个基于Eclipse平台的PHP IDE



PhpStorm -一个商业PHP IDE







Web Applications Web应用



基于Web的应用和工具



3V4L一个在线的PHP shell



DBV -一个数据库版本控制应用



PHP Queue -一个管理后端队列的应用



Composer as a Service – 作为一个zip文件下载Composer包的工具



MailCatcher – 一个抓取和查看邮件的web工具







Resources 资源



各种提高你的PHP开发技能和知识的资源,比如书籍,网站,文章



PHP网站



PHP相关的有用网站



PHP The Right Way -一个PHP最佳实践的快速指引手册



PHP Best Practices – 一个PHP最佳实践指南



PHP Weekly – 一个PHP新闻周刊



PHP Security – 一个PHP安全指南



PHP FIG – PHP框架交互组



PHP UG -一个帮助用户定位最近的PHP用户组(UG)的网站



Seven PHP -一个PHP社区成员采访的网站



Nomad PHP -一个在线PHP学习资源



PHP Mentoring -点对点PHP导师组织







Other Websites 其他网站



web开发相关的有用网站



The Open Web Application Security Project (OWASP) -一个开放软件安全社区



WebSec IO – 一个web安全社区资源



Web Advent -一个web开发人员日历



Semantic Versioning -一个解析语义版本的网站



Atlassian Git Tutorials -一个Git教程系列



Hg Init -一个Mercurial教程系列



Servers for Hackers – 一个关于服务器管理的新闻通讯



原文链接:http://www.kubiji.cn/topic-id2570.html