最近在阅读PHP的内核,所以把过程记下来。
本人使用cli方式启动php,版本是7.3.3, 调试平台是centos6.5。
cli方式启动的入口位于 sapi/cli/php_cli.c main
1. 函数save_ps_args
这个函数是进来后调用的第一个函数,原型:char** save_ps_args(int argc, char** argv)
其功能是保存命令行参数,检查命令行参数和环境变量。
保存命令行参数:
save_argc = argc;
save_argv = argv;
检查命令行参数:
for (i = 0; (non_contiguous_area == 0) && (i < argc); i++)
{
if (i != 0 && end_of_area + 1 != argv[i])
non_contiguous_area = 1;
end_of_area = argv[i] + strlen(argv[i]);
}
检查环境变量:
for (i = 0; (non_contiguous_area == 0) && (environ[i] != NULL); i++)
{
if (end_of_area + 1 != environ[i])
non_contiguous_area = 1;
end_of_area = environ[i] + strlen(environ[i]);
}
将环境变量保存到新地址,同时备份一个原始内容:
new_environ = (char **) malloc((i + 1) * sizeof(char *));
frozen_environ = (char **) malloc((i + 1) * sizeof(char *));
if (!new_environ || !frozen_environ)
goto clobber_error;