18. Strtoupper/strtolower 遇到中文会乱码 1 需要手动分割字符串,然后 ord 函数判 断是否是单词,是则大小写转换,中文则不处理 2 mb_convert_case 函数中有可选参 数,直接能处理这种情况
19. Php-fpm 和 NGINX 通信机制CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。
PHP-CGI:是 PHP (Web Application)对 Web Server 提供的 CGI 协议的接口程
序。PHP-FPM:是 PHP(Web Application)对 Web Server 提供的 FastCGI 协议的接口
程序,额外还提供了相对智能一些任务管理。
CGI就是规定要传哪些数据,以什么样的格式传递给后方处理这个请求的协议,例如
URL、查询字符串、POST数据、HTTP header,缺点是每次请求都有启动和退出操
作,不适合并发场景Fastcgi 是常驻类型的,不需要每次去激活了
FastCGI程序会 先启动一个master,解析配置环境,初始化执行环境,然后再启动多个
worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请
求。
首先要说的是:fastcgi是一个协议,php-fpm实现了这个协议。
大家都知道,PHP的解释器是php-cgi。php-cgi只是个CGI程序,他自己本身只能解析 请求,返回结果,不会进程管理,所以就出现了一些能够调度php-cgi进程的程序, php-fpm就是这样的一个东西。它克服了php-cgi变更php.ini配置后,需重启php-cgi 才能让新的php-ini生效,不可以平滑重启,直接杀死php-cgi进程,php就不能运行了 的问题。修改php.ini之后,php-cgi进程的确没办法平滑重启的。php-fpm对此的处理 机制是新的worker用新的配置,已经存在的worker处理完手上的活就可以歇着了,通 过这种机制来平滑过度。
- Include 和 require 区别
这两者是语言结构,不是函数,他们都可以直接引用参数,而不是括号内引用参数
include在用时加载,一般放在代码段中,出错时继续执行下面的代码
require一般放在脚本最前面,会一开始就读取,出错时停止运行代码
_once 是已加载的不加载 - Http 和 HTTPS区别Https 需要证书 http 是明文传输 使用 80 端口 https 是具有安全性的ssl加密传输协 议,使用443端口 http的链接是无状态的,https 是ssl + http 协议构建的可进行加密 传输,身份认证的协议
- Php-fpm 与 php 交互Php-fpm 运行的三种模式:Static 模式最简单,直接启动配置的固定数量的进程,但是灵活性不够高Ondemand 模式相对 static 模式比较复杂,会根据请求量的增加动态增加,但是处理
完请求后不会立即释放,而是由定时事件定时的检测空闲到一定时间的进程才会释放
Dynamic 模式类似于 ondemand 模式,但进程的回收机制不同于 ondemand 模式,
会根据 idle 数量进行增加和减少worker数量
Php-fpm 运行的逻辑:
Fpm 的实现就是创建一个 master 进程,在 master 进程中创建 worker pool 并监听 socket,然后 fork出多个子进程(work),这些 worker 在启动后阻塞在 fcgi_accept_request() 上,各自 accept 请求,有请求到达后 worker 开始读取请求数 据,读取完成后开始处理然后再返回,在这期间是不会接收其它请求的,也就是说 fpm 的子进程同时只能响应一个请求,只有把这个请求处理完成后才会 accept 下一个请 求。
Nginx 与 php-fpm 有两种通信方式:tcp socket 和 unix socket,unix 不需要经过 网络协议栈,不需要打包拆包,计算校验和,维护序号和应答,只是将应用层数据从一 个进程拷贝到另一个进程,减少不必要的 tcp 开销,高并发时性能不稳定,tcp 模式可 以保证通信的正确性和完整性,效率可以通过负载均衡等优化。