SAPI:Server Application Programming Interface 服务器端应用编程端口。它就是PHP与其它应用交互的接口,PHP脚本要执行有很多种方式,通过Web服务器,或者直接在命令行下,也可以嵌入在其他程序中。
SAPI提供了一个和外部通信的接口,常见的SAPI有:cgi 、fast-cgi、cli、isapi、apache 模块的 DLL

CGI
CGI即通用网关接口(Common Gateway Interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执 行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。
CGI方式在遇到连接请求(用户 请求)先要创建cgi的子进程,激活一个CGI进程,然后处理请求,处理完后结束这个子进程。这就是fork-and-execute模式。所以用cgi 方式的服务器有多少连接请求就会有多少cgi子进程,子进程反复加载是cgi性能低下的主要原因。都会当用户请求数量非常多时,会大量挤占系统的资源如内 存,CPU时间等,造成效能低下。

FastCGI
fast-cgi 是cgi的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。

FastCGI的工作原理

Read More →

php 提供的字符串压缩方法有

1.gzcompress——压缩一个字符串
这个函数使用ZLIB压缩给定字符串数据格式。

2.gzencode——创建一个字符串gzip压缩
这个函数返回输入数据的一个压缩版本兼容程序gzip的输出

3.gzdeflate——缩小一个字符串
这个函数使用缩小数据格式压缩给定字符串。

4.bzcompress — 把一个字符串压缩成 bzip2 编码数据
bzcompress() 压缩了指定的字符串并以 bzip2 编码返回数据。

gzcompress 速度最快,压缩比率较高。
gzdeflate 压缩比率最高,速度稍慢于gzcompress
gzencode 与 gzdeflate 比较接近,gzdeflate稍有优势
bzcompress 速度最慢,压缩比率最慢。

具体如下:

下面php代码通过gzcompress和gzuncompress压缩和解压缩字符串,可以设定压缩级别

$str = ‘Hello I am a very very very very long string’;
$compressed = gzcompress($str, 9);//压缩级别为9
$uncompressed = gzuncompress($compressed);
echo $str, “\n”;
echo $uncompressed, “\n”;
echo base64_encode($compressed), “\n”;
echo bin2hex($compressed), “\n”;
echo urlencode($compressed), “\n”;

在使用phpsocket.io时需要https支持,在配置的时候踩了不少坑,这里做一下笔记。

如果你的ssl比较多,当然可以用独立域名来配置phpsocket.io 那就比较简单。只需要用nginx代理ssl就可以了,配置如下

server {
listen 443;

# host name to respond to
server_name ws.example.com;

# your SSL configuration
ssl on;
ssl_certificate /etc/ssl/localcerts/ws.example.com.bundle.crt;
ssl_certificate_key /etc/ssl/localcerts/ws.example.com.key;

location / {
# switch off logging
access_log off;

# redirect all HTTP traffic to localhost:8080
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

# WebSocket support (nginx 1.4)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
}
}

Read More →

由于项目需要,写了一个php文件缓存类,如果不使用命名空间,请把namespace那行注释


使用方法如下

$cache = \tool\cache::factory('test',['array'=>'123','test'=>'bbbb']); //默认2小时过期时间写入
$cache = \tool\cache::factory('test',['array'=>'123','test'=>'bbbb',24]); //24小时过期时间写入
$cache = \tool\cache::factory('test',['array'=>'123','test'=>'bbbb','','mydir']); //默认2小时写入根目录下的mydir目录
$cache = \tool\cache::factory('test'); //读取
\tool\cache::factory('test',NULL); //删除