php 不是有自己的解析器吗?
apache 只是将url请求对应到本地服务器的磁盘文件,发现该文件是.php的,就会交给php解析器来做(这个过程之后就和apache暂时没有关系了)
apache所在用户(www-data)需要对该文件有读取的权限 然后php解析器去执行这个脚本
将执行完毕的结果(dom文档)一并交给apache,
apche再将dom文档原样(可能加一些响应头之类的)返回给客户端浏览器
客户端浏览器接收到dom文档,加载js引擎 逐行解析, 碰到img这些特殊标签才会再次向服务器发送请求 ...
我理解的是apache只是负责传递一下分配一下? 请前辈指出我理解不对的地方
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
先看一些Apache里的PHP配置httpd.conf:
LoadModule php5_module modules/libphp5.so
AddHandler application/x-httpd-php .php
libphp5.so/libphp7.so作为Apache的一个模块module,PHP解释器是工作在Apache进程内(运行用户是相同的),Apache会把.php后缀的文件交给进程内的PHP模块处理,并把结果返回给浏览器.也就是说,载入了PHP模块的Apache就是一个PHP运行容器,它们是一个整体,是耦合的,所以必须先编译Apache,才能在编译PHP时用参数--with-apxs2=/png/httpd/2.4/bin/apxs指定Apache模块构建脚本,告诉Apache我要构建PHP模块.
对于Nginx和PHP-FPM这种模式,楼主才需要考虑到运行用户不同权限不同的问题,因为Nginx和PHP-FPM是分离的,两者是不同的进程,通过TCP或者Unix Domain Socket通信,不过一般Nginx和PHP-FPM都设为同样的运行用户,方便Nginx和PHP-FPM都能有权限操作同样的文件.另外PHP-FPM也可以看做一个PHP容器,因为PHP-FPM进程也是内置了PHP解释器的,因为其不依赖命令行的php,也不依赖php-cgi,跟Apache的区别就是PHP-FPM是一个FastCGI服务,而Apache是一个HTTP服务,Apache能够直接跟浏览器通信,而PHP-FPM则需要通过Nginx跟浏览器交互.