越努力 越幸运

命令行艺术之 grep

一、概览

二、参考资料

PHP 的 empty 函数

一、问题是这样的

描述问题现象前,先上代码:

// $ret['errno'] 的值由更新 update 数据库返回
// update 操作会把 affected_rows 值返回
if (empty($ret['errno'])) {
    // update 不成功则 insert
}

根据代码看,问题已经很明显了:

如果 affected_rows 等于 0,$ret[‘errno’] 就等于 0,那么它会就是 empty 的吗?

熟悉 PHP 的你,肯定觉得是个小儿科的问题了,但是对于刚看 PHP 两天的我来说,这个问题还是值得记录下。

接下来就记录下,在 PHP 里什么内容会被认为是 empty 的?!

PHP 的排序函数

一、概览

二、参考资料

命令行艺术之 top

一、概览

二、参考资料

细说 CGI、FastCGI、PHP-CGI 和 PHP-FPM 的关系

一、概念总结

刚开始学习的 PHP 的时候,就会被几个词搞混:CGIFastCGI PHP-CGIPHP-FPM,它们都是干什么活的?之间又有些什么联系和区别呢?接下来就先介绍它们的概念。

1. CGI

CGICommon Gateway Interface 的缩写,可以使客户端从网页浏览器向执行在网络服务器上的程序请求数据,它描述了客户端与服务器程序之间进行数据传输的标准,是一种协议

2. FastCGI

顾名思义,是 CGI 的改进版,也是一种协议,实现上是一个常驻进程,它会一直运行着,在请求到来时不会重新启新进程去处理( CGI 为 fork-and-execute 模式)。

FastCGI 把 PHP 语言和 Web 服务器分开,故 Nginx 和 PHP 通常可以部署在不同机器上,以减轻 Nginx 和后端的压力。

FastCGI 的主要特点有:

语言无关的、可伸缩架构的 CGI 开放扩展

将 CGI 解释器进程保持在内存中以此获取高性能

不依赖任何 web 服务器内部架构

平滑重新加载配置文件

FastCGI 的工作原理:markdown画图有问题,等解决后画出流程图会更清晰

Web 服务器启动时载入 FastCGI 进程管理器(运行在 Web 服务器中);

FastCGI 进程管理器自身初始化,启动多个 CGI 解释器进程(可以看见有多个 PHP-CGI 进程),等待 Web 服务器的连接请求;

当客户端请求到达 Web 服务器时,FastCGI 进程管理器选择并连接到其中一个 CGI 解释器,Web 服务器将 CGI 环境变量和标准输入传给 FastCGI 子进程 PHP-CGI;

FastCGI 子进程完成处理后将标准输出和错误信息从同一连接返回给 Web 服务器,当 FastCGI 子进程关闭连接时请求也就完成,接着 FastCGI 子进程继续等待并处理来自 FastCGI 进程管理器的下一个连 接。

使用 FastCGI 的好处很明显:解析 PHP 配置文件、载入扩展、初始化数据结构,只在进程启动时发生一次,同时,持久数据库连接(persistent database connection)可以使用。