PHP程序的执行流程怎么样
为了以后能开发PHP扩展,就一定要了解PHP的执行顺序。这篇文章就是为C开发PHP扩展做铺垫。
Web环境我们假设为Apache。在编译PHP的时候,为了能够让Apache支持PHP,我们会生成一个mod_的模块。Apache加载这个模块,在url访问文件的时候,就会转给mod_模块来处理。这个就是我们常说的SAPI。英文名字是:Server Application Programming Interface。SAPI其实是一个统称,其下有 ISAPI,CLI SAPI,CGI等。有了它,就可以很容易的跟其他东西交互,比如APACHE,IIS,CGI等。
Apache启动后会将mod_模块的hook handler注册进来,当Apache检测到访问的url是一个php文件时,这时候就会把控制权交给SAPI。进入到SAPI后,首先会执行sapi/apache/mod_php5.c 文件的_init_handler函数,这里摘录一段代码:
static void php_init_handler(server_rec *s, pool *p)
{
register_cleanup(p, NULL, (void (*)(void *))apache_php_module_shutdown_wrapper, (void (*)(void *))php_module_shutdown_for_exec);
if (!apache_php_initialized) {
apache_php_initialized = 1;
#ifdef ZTS
tsrm_startup(1, 1, 0, NULL);
#endif
sapi_startup(&apache_sapi_module);
php_apache_startup(&apache_sapi_module);
}
#if MODULE_MAGIC_NUMBER >= 19980527
{
TSRMLS_FETCH();
if (PG(expose_php)) {
ap_add_version_component("PHP/" PHP_VERSION);
}
}
#endif
}
该函数主要调用两个函数:sapi_startup(&apache_sapi_module); php_apache_startup(&apache_sapi_module);
SAPI_API void sapi_startup(sapi_module_struct *sf)
{
sf->ini_entries = NULL;
sapi_module = *sf;
.................
sapi_globals_ctor(&sapi_globals);
................
virtual_cwd_startup(); /* Could use shutdown to free the main cwd but it would just slow it down for CGI */
..................
reentrancy_startup();
}
sapi_startup创建一个 sapi_globals_struct结构体。sapi_globals_struct保存了Apache请求的基本信息,如服务器信息,Header,编码等。sapi_startup执行完毕后再执行php_apache_startup。
static int php_apache_startup(sapi_module_struct *sapi_module)
{
if (php_module_startup(sapi_module, &apache_module_entry, 1) == FAILURE) {
return FAILURE;
} else {
return SUCCESS;
}
}
-
php统计数组元素个数的方法
PHP是一种HTML内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的.风格有类似于C语言,被广泛地运用。下面是小编为大家搜索整理的php统计数组元素个数的方法,希望大家能有所收获,更多精彩内容请及时关注我们应届毕业生考试网!count():对数组中的元...
-
PHP数据类型之数组变量详解
导语:PHP是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。下面我们来看看PHP数据类型之数组变量详解,希望对大家有所帮助。PHP中的数组实际上是一个有序图,是一种把values映射到keys的类型。一个数组实际上就...
-
PHP考试笔试题
用宝珠打扮自己,不如用知识充实自己。以下是小编为大家搜索整理的PHP考试笔试题,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!1、{PHP题目}标识符是变量的名称。PHP中的标识符用$+变量名来表示。标识符在PHP中遵循下列选项中的那些规则?()...
-
PHP学习10个基础知识总结
PHP学习过程中,必须要掌握基础的知识点,以下是小编为大家搜索整理的PHP学习10个基础知识总结,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!PHP10个小基础知识总结1,在HTML嵌入PHP脚本有三种办法:以下为引用的内容:<scriptlanguage="PHP">//嵌...