question-about-Thinking-in-PHP-internals-Apache

Apache模块

apache 是Apache软件基金会的一个开放源代码的web服务器,可以在大多数电脑操作系统中运行。

什么是web服务器?

什么是模块扩展?怎样实现模块扩展?

有哪些常见的模块?

什么是mod_auth?

what’s mod_ssl?

what’s mod_rewrite?

什么是以Apache模块的方式与Apache集成?

perl python tcl PHP 是怎样和Apache集成的?

PHP是怎样以mod_php5模块的形式集成?为什么是5不是4?

mod_php5的作用是什么?

如何让Apache启动的时候启动模块以接受PHP文件的请求?通过注册什么?

什么是动态加载?功能扩展是啥?

怎样给服务器发送信号HUP?HUP是什么?

AP_SIG_GRACEFUL通知服务器重新载入模块。怎么通知的?AP_SIG_GRACEFUL是啥?

什么是动态链接库?如何将模块编译成动态链接库?

Apache是通过什么模块来对动态链接库进行处理的?

Apache是如何加载模块的?

module结构体中的magic字段是什么?怎么实现?如何体现?定义是什么?

如何激活模块?整个流程是什么?

什么是挂钩?启动挂钩是什么?请求挂钩又是啥?

DSO module是什么?

描述下Apache加载mod_php5模块的整个过程?

如何理解下面这个:

如果我们定义了此前服务器接口的flush函数,则直接调用flush对应的函数,返回成功,否则返回失败。 对于我们当前的Apache模块,其实现为php_apache_sapi_flush函数,最终会调用Apache的ap_rflush,刷新apache的输出缓冲区。 当然,flush的操作有时也不会生效,因为当PHP执行flush函数时,其所有的行为完全依赖于Apache的行为,而自身却做不了什么, 比如启用了Apache的压缩功能,当没有达到预定的输出大小时,即使使用了flush函数,Apache也不会向客户端输出对应的内容。

apache的运行过程

apache是如何启动的?以什么用户身份启动?整个过程处在什么进程线程环境中?这个阶段都做了哪些工作?

Apache启动阶段执行了大量的初始化操作是为了什么?

Apache运行阶段的主要工作是什么?使用的身份是什么?为什么要切换身份?怎样切换的?

Apache对HTTP的请求分为几个阶段?细分可以是哪几个?

Apache hook机制

什么是Apache hook机制?

定义如下:

Apache允许模块(包括内部模块和外部模块,例如mod_php5.so,mod_perl.so等)将自定义的函数注入到请求处理循环中。 换句话说,模块可以在Apache的任何一个处理阶段中挂接(Hook)上自己的处理函数,从而参与Apache的请求处理过程。 mod_php5.so/ php5apache2.dll就是将所包含的自定义函数,通过Hook机制注入到Apache中,在Apache处理流程的各个阶段负责处理php请求。 关于Hook机制在Windows系统开发也经常遇到,在Windows开发既有系统级的钩子,又有应用级的钩子。

如何将自定义的函数注入到请求处理循环中?

Apache常用对象

关于httpd.h文件,了解多少?

httpd.h文件里面包含的是什么?定义了什么?

request_rec对象是啥?

server_rec对象是啥?

conn_rec对象是啥?

结论

对Apache还是比较疑惑

Apache和Nginx的区别是什么,为什么搭建环境时有时是Apache 有时是Nginx,它们起的作用是什么?

apache的不同版本对php有啥影响?

参考资料:《The Apache Modules Book–Application Development with Apache》