1.【PHP源码分析】FastCGI协议浅析
2.php-fpm.conf.default 5.3.27 å¨åª
3.PHP-FPM详解
【PHP源码分析】FastCGI协议浅析
FastCGI协议是源码一种建立在CGI/1.1基础上的协议,用于在Web服务器和应用程序之间传递数据。详解其核心作用是源码优化Web应用的性能,简化开发流程,详解提高资源利用效率。源码
FastCGI协议分为种类型的详解学校网站设计源码消息,包括FCGI_BEGIN_REQUEST、源码FCGI_PARAMS、详解FCGI_STDIN、源码FCGI_STDOUT、详解FCGI_STDERR和FCGI_END_REQUEST等。源码消息类型定义了数据传输的详解顺序和格式,以及请求和响应的源码开始与结束。请求通常以FCGI_BEGIN_REQUEST类型开始,详解html手机源码然后是源码FCGI_PARAMS和FCGI_STDIN消息,处理完成后发送FCGI_STDOUT和FCGI_STDERR,最后以FCGI_END_REQUEST结束。
每个消息类型都以一个统一结构的消息头开始,包括requestId、contentLength和paddingLength等关键字段。requestId用于标识请求的唯一性,内容长度表示消息体的数据大小,paddingLength则用于填充发送的数据,以实现更有效的数据处理。
FCGI_BEGIN_REQUEST消息包含Web服务器期望应用扮演的角色信息,通常在PHP7中处理FCGI_RESPONDER、FCGI_AUTHORIZER和FCGI_FILTER三种角色。通达信 公式源码flags & FCGI_KEEP_CONN字段表示是否在响应后关闭连接。
对于FCGI_PARAMS类型的消息,FastCGI协议提供了名-值对结构,用于处理可变长度的name和value。这种结构可以节省空间,并且支持表示0至2的次方长度的数据。
FastCGI协议的请求结构体包含了所有请求消息的定义。通过访问对应接口、使用gdb抓取消息内容、修改php-fpm.conf参数并重新启动php-fpm,可以深入分析FastCGI协议的实际应用。
通过浏览器访问nginx,nginx将请求转发到php-fpm的一元购 源码worker。使用gdb可以打印出FastCGI消息内容,例如FCGI_BEGIN_REQUEST和FCGI_PARAMS消息。根据协议定义和消息结构,可以分析出请求的详细信息,如角色、内容长度等。处理完请求后,FastCGI协议会发送FCGI_END_REQUEST消息,完成请求的响应过程。
FCGI_END_REQUEST消息由fcgi_finish_request函数调用fcgi_flush函数生成,再通过safe_write写入socket连接的客户端描述符。至此,完全掌握了FastCGI协议的源码邦原理和操作。
php-fpm.conf.default 5.3. å¨åª
ããé¦é¡µ > è¿ç»´ > linux ä¸ç¼è¯å®è£ php-5.3.
ããlinux ä¸ç¼è¯å®è£ php-5.3.
ãã1.ç¯å¢è¯´æ
ããubuntu .
ããæºç åå¨è·¯å¾ /home/wzw/workstation/src
ããå®è£ è·¯å¾ /home/wzw/workstation/env
ããåæ¢å°å·¥ä½ç®å½ cd /home/wzw/workstation/src/
ãã2.å®è£
ããwget 2.php.net/distributions/php-5.3..tar.gz
ããsudo mkdir -p /home/wzw/workstation/env/php5
ããsudo tar -zxvf php-5.3..tar.gz
ããcd php-5.3.
ããsudo ./configure --prefix=/home/wzw/workstation/env/php5 --with-config-file-path=/home/wzw/workstation/env/php5/etc/php.ini --with-mysql=/home/wzw/workstation/env/mysql5 --with-pdo-mysql=/home/wzw/workstation/env/mysql5 --enable-magic-quotes --enable-static --enable-mbstring --enable-sockets --enable-zip --with-curl --with-libxml-dir --enable-fpm
ãã#ãåºéï¼configure: error: xml2-config not found. Please check your libxml2 installation.
ãã# 解å³ï¼sudo apt-get install libxml2-devã
ãã#ãåºéï¼You've configured multiple SAPIs to be build. You can build only |
ãã# | one SAPI module and CLI binary at the same time.
ãã# 解å³ï¼ç¼è¯ä¸å¸¦è¿ä¸ªåæ°--with-apxs2=/home/wzw/workstation/env/apache2/bin/apxs ã
ãã#ãåºéï¼configure: error: Please reinstall the libcurl distribution -
ãã# easy.h should be in <curl-dir>/include/curl/
ãã# 解å³ï¼sudo apt-get install libcurl4-openssl-devã
ããsudo cp php.ini-production ../../env/php5/etc/php.ini
ããsudo cp /home/wzw/workstation/env/php5/etc/php-fpm.conf.default /home/wzw/workstation/env/php5/etc/php-fpm.conf
ããsudo vim /home/wzw/workstation/env/php5/etc/php-fpm.conf
ãã# æ¾å° ;pid = run/php-fpm.pid ã大æ¦è¡ï¼å»æåé¢çåå·ã
ããsudo vim /home/wzw/workstation/env/nginx/conf/nginx.conf
ãã# å¨ location ä¸ç index å ä¸index.phpï¼ï¼å¤§æ¦æ¯å¨è¡ï¼å¦ï¼
ãã# index index.php index.html index.htm;
ãã# å»æ loction ~ \.php$ { ... } è¿ä¸ªæ¨¡åç注é #
ãã# 并æå ¶ä¸ç scripts æ¹æ $document_root
ãã3.è¿è¡
ããcd /home/wzw/workstation/env/php5
ããsudo ./sbin/php-fpm -y ./etc/php-fpm.conf
ãã# ãæ¥éï¼[-Sep- ::] ERROR: [pool www] cannot get gid for group 'nobody'
ãã# [-Sep- ::] ERROR: FPM initialization failed
ãã# 解å³ï¼æå¼etc/php-fpm.confï¼å¤§æ¦è¡ï¼ï¼ænobodyæ¹æwww-data
ãã# ã
ãã4.æµè¯
ãã./bin/php -r "echo 2+4;"
ããè¾åº 6 说æå®è£ æåï¼
PHP-FPM详解
PHP-FPM是PHP FastCGI进程管理器,专为管理PHP进程池设计,用于接收web服务器请求。
第一部分,为什么出现PHP-FPM?PHP-FPM的诞生源自PHP-FastCGI的需求。为有效管理PHP-FastCGI而出现的程序。
第二部分,了解PHP-FastCGI。它只是一个解析PHP请求并返回结果的CGI程序,并不负责管理进程。
第三部分,为何不称为PHP-CGI?在PHP-FastCGI之前,存在PHP-CGI,但其执行效率低下,最终被PHP-FastCGI取代。
第四部分,解释FastCGI与CGI的区别。在FastCGI时代,当web服务器(如nginx)接收到请求并识别为动态PHP请求时,会将其转给PHP处理。在CGI模式下,每次请求时都需要读取php.ini配置,初始化执行环境,耗时且重复。
第五部分,FastCGI的效率提升。FastCGI允许一次启动一个主进程(master),读取一次配置,然后启动多个工作进程(worker)。当请求来临时,master将请求传递给worker,避免了重复的初始化工作。
第六部分,PHP-FPM的工作原理。PHP-FPM创建一个主进程来控制何时以及如何将HTTP请求转发给一个或多个子进程处理。主进程还负责管理进程的创建与销毁,以适应Web应用流量的变化。
安装部分,PHP在5.3.3之后将PHP-FPM整合到核心代码中,无需单独下载安装。只需在编译PHP源码时添加--enable-fpm即可启用PHP-FPM支持。
全局配置方面,CentOS中PHP-FPM的主配置文件为/etc/php7/php-fpm.conf,配置内容通常包括进程池定义。
在CentOS中,PHP-FPM主配置文件顶部引入了进程池定义文件,通常使用www.conf作为默认配置文件。进行必要的编辑保存后,重启PHP-FPM主进程。
PHP-FPM进程池的详细配置请参考php.net/manual/install文档。
针对Company开发环境的配置,提供测试环境与生产环境的具体配置示例。以nginx为例,说明如何转发请求给PHP-FPM。
最后,针对PHPer进阶时遇到的问题,提供了一系列资料,涵盖分布式架构、高可扩展性、高性能、高并发、服务器性能调优、TP6、Laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等高级进阶干货,需要的读者可以免费获取。