찾다
php教程php手册【php源代码学习笔记】php的启动

【php源代码学习笔记】php的启动

Jun 06, 2016 pm 07:49 PM
php시작하다공부하다방법기준 치수소스 코드메모

从 apche 的模块方式进入 php 上回说道 apache 调用 php 有两种方式一个是模块方式,一种是 cgi 模式,我就从模块方式调用 php 开始分析。 首先得看看 Php 源代码目录机构 摘自: http://www.php-internal.com/book/?p=chapt01/01-02-code-structure 根目录

apche的模块方式进入php


上回说道apache调用php有两种方式一个是模块方式,一种是cgi模式,我就从模块方式调用php开始分析。




首先得看看Php源代码目录机构

摘自:http://www.php-internal.com/book/?p=chapt01/01-02-code-structure

  • 根目录:/这个目录包含的东西比较多,主要包含一些说明文件以及设计方案。其实项目中的这些README文件是非常值得阅读的例如:

    • /README.PHP4-TO-PHP5-THIN-CHANGES这个文件就详细列举了PHP4PHP5的一些差异。

    • 还有有一个比较重要的文件/CODING_STANDARDS,如果要想写PHP扩展的话,这个文件一定要阅读一下,不管你个人的代码风格是什么样,怎么样使用缩进和花括号,既然来到了这样一个团体里就应该去适应这样的规范,这样在阅读代码或者别人阅读你的代码是都会更轻松。

  • build顾名思义,这里主要放置一些和源码编译相关的一些文件,比如开始构建之前的buildconf脚本等文件,还有一些检查环境的脚本等。

  • ext官方扩展目录,包括了绝大多数PHP的函数的定义和实现,如array系列,pdo系列,spl系列等函数的实现,都在这个目录中。个人写的扩展在测试时也可以放到这个目录,方便测试和调试。

  • main这里存放的就是PHP最为核心的文件了,主要实现PHP的基本设施,这里和Zend引擎不一样,Zend引擎主要实现语言最核心的语言运行环境。

  • ZendZend引擎的实现目录,比如脚本的词法语法解析,opcode的执行以及扩展机制的实现等等。

  • pear“PHP 扩展与应用仓库”,包含PEAR的核心文件。

  • sapi包含了各种服务器抽象层的代码,例如apachemod_phpcgifastcgi以及fpm等等接口。

  • TSRMPHP的线程安全是构建在TSRM库之上的,PHP实现中常见的*G宏通常是对TSRM的封装,TSRM(ThreadSafe Resource Manager)线程安全资源管理器。

  • testsPHP的测试脚本集合,包含PHP各项功能的测试文件

  • win32这个目录主要包括Windows平台相关的一些实现,比如sokcet的实现在Windows下和*Nix平台就不太一样,同时也包括了Windows下编译PHP相关的脚本。



要想apache能运行php文件得做一些配置。否则php文件会被当作文件被输出。


采用模块方式运行php,在apache的配置文件中需要添加

LoadModulephp5_module /usr/lib/apache2/modules/libphp5.so


这样的一句。其实就是说加载php模块

apache在启动时候会加载php模块,通过加载结构体:

AP_MODULE_DECLARE_DATAmodule php5_module = {

STANDARD20_MODULE_STUFF,/*宏,包括版本,小版本,模块索引,模块名,下一个模块指针等信息,其中模块名以__FILE__体现

*/

create_php_config, /*创建php目录配置*/

merge_php_config, /*合并php目录配置*/

NULL, /*创建主机目录配置  */

NULL, /*合并主机合并配置*/

php_dir_cmds, /*为模块配置相关指令 */

php_ap2_register_hook /*注册模块的钩子函数 */

};



此代码在./sapi/apache2handler/mod_php5.c中。


apache通过这里的配置配置参数,分别加载对应的配置。apapche会维护三个链表:hook链表模块链表模块配置链表。将这些配置分别加入到这三个链表中。这里涉及到apache的一些细节,这两天看得有点迷糊。下次做专门研究。

参数说明:

STANDARD20_MODULE_STUFF,这个参数是个宏,存储了模块当前适应的apapche版本信息,apapche加载模块的时候会检测这个宏中的定义来看是否兼容此模块,如果不兼容则停止加载。


create_php_config

merge_php_config是两个函数指针在同目录下的apache_config.c中。当apache启动配置时候会调用做初始化配置。(这里详细的得后查)


主机的配置主要用于服务器虚拟主机,php不是先虚拟主机,没有。


php_dir_cmds也是以函数指针,也在apache_config.c中。主要用于注册php启动时候传递给php的参数钩子。其中有5个钩子:php_valuephp_flag php_admin_value php_admin_flag PHPINIDir主要应用与不同目录和网站对调用不同php配置的情况:详情参看:http://blog.zuoxizhidu.com/1/125.htm



php_ap2_register_hook应用处理相关的钩子 ,也在sapi_apache2.c中。其注册了4个钩子。

服务器启动时调用ap_hook_pre_configap_hook_post_configap_hook_child_initap_hook_pre_config钩子用于检测php进程是否启动,已经启动报错。ap_hook_post_config调用的是函数php_apache_server_startup用于php模块在这里会被正式启动,初始化phpzend

ap_hook_child_init用于子进程的启动。php_handle用于用户请求时候的hook在这里检查文件正式执行php




一个启动弄了好半天才看得稍微明白,惭愧!


如果我理解的不对的 希望大牛帮忙指正!


另外发现一个看php源代码的好网站,直接给函数定义上了链接 一点就可以进函数定义和引用的地方非常好http://lxr.sweon.net/










성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구