PHP内核两大流程之请求处理_PHP教程
PHP内核两大流程之请求处理
static int php_handler(request_rec *r) { /* Initiliaze the context */ php_struct * volatile ctx; void *conf; apr_bucket_brigade * volatile brigade; apr_bucket *bucket; apr_status_t rv; request_rec * volatile parent_req = NULL; TSRMLS_FETCH(); ...... zend_file_handle zfd; zfd.type = ZEND_HANDLE_FILENAME; zfd.filename = (char *) r->filename; zfd.free_filename = 0; zfd.opened_path = NULL; zend_execute_scripts(ZEND_INCLUDE TSRMLS_CC, NULL, 1, &zfd); ...... } ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_count, ...) /* {{{ */ { ...... EG(active_op_array) = \ zend_compile_file(file_handle, type TSRMLS_CC); ...... zend_execute(EG(active_op_array) TSRMLS_CC); ...... } ZEND_API void execute(zend_op_array *op_array TSRMLS_DC)   {       // 初始化执行上下文       zend_execute_data execute_data;          // 如果有异常就退出执行       if (EG(exception)) {           return;       }          /* Initialize execute_data */       EX(fbc) = NULL; // 初始化正在调用的函数       EX(object) = NULL; // 初始化正在调用的对象       EX(old_error_reporting) = NULL; // 初始化错误报告变量              // 为执行栈分配空间       if (op_array->T < TEMP_VAR_STACK_LIMIT) {           EX(Ts) = (temp_variable *) do_alloca(sizeof(temp_variable) * op_array->T);       } else {           EX(Ts) = (temp_variable *) safe_emalloc(sizeof(temp_variable), op_array->T, 0);       }       // 为临时变量分配空间并初始化这些空间       EX(CVs) = (zval***)do_alloca(sizeof(zval**) * op_array->last_var);       memset(EX(CVs), 0, sizeof(zval**) * op_array->last_var);              EX(op_array) = op_array;              // 切换执行上下文       EX(original_in_execution) = EG(in_execution);       EX(symbol_table) = EG(active_symbol_table);       EX(prev_execute_data) = EG(current_execute_data); // 将当前全局变量中的执行数据压栈       EG(current_execute_data) = &execute_data; // 将当前执行上下文压栈          EG(in_execution) = 1;       // 初始化第一个指令(opcode)       /*      #define ZEND_VM_SET_OPCODE(new_op) \      CHECK_SYMBOL_TABLES() \      EX(opline) = new_op            execute_data.opline 为当前执行的 opcode      */       if (op_array->start_op) {           ZEND_VM_SET_OPCODE(op_array->start_op);       } else {           ZEND_VM_SET_OPCODE(op_array->opcodes);       }          if (op_array->uses_this && EG(This)) {           EG(This)->refcount++; /* For $this pointer */           if (zend_hash_add(EG(active_symbol_table), "this", sizeof("this"), &EG(This), sizeof(zval *), NULL)==FAILURE) {               EG(This)->refcount--;           }       }          // 将存储opline的内存地址赋给 executor_globals.online_ptr ,可以实时跟踪opcode的执行       EG(opline_ptr) = &EX(opline);          EX(function_state).function = (zend_function *) op_array;       EG(function_state_ptr) = &EX(function_state);   #if ZEND_DEBUG       /* function_state.function_symbol_table is saved as-is to a stack,       * which is an intentional UMR.  Shut it up if we're in DEBUG.       */       EX(function_state).function_symbol_table = NULL;   #endif              while (1) {   #ifdef ZEND_WIN32           if (EG(timed_out)) {               zend_timeout(0);           }   #endif                      // 循环调用每个opline的 handler 函数,如果是推出函数的话,返回值大于0,就退出           if (EX(opline)->handler(&execute_data TSRMLS_CC) > 0) {         return;           }          }       zend_error_noreturn(E_ERROR, "Arrived at end of main loop which shouldn't happen");   }  

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

在Ubuntu22.04上安装Linux内核可以按照以下步骤进行操作:更新系统:首先,确保你的Ubuntu系统是最新的,执行以下命令更新系统软件包:sudoaptupdatesudoaptupgrade下载内核文件:访问Linux内核官方网站()下载所需的内核版本。选择一个稳定版本并下载源代码文件(以.tar.gz或.tar.xz为扩展名),例如:wget解压文件:使用以下命令解压下载的内核源代码文件:tar-xflinux-5.14.tar.xz安装构建依赖:安装构建内核所需的工具和依赖项。执

Linux修改内核(kernel)启动顺序一、RHEL6/CentOS6修改内核启动顺序查看/etc/grub.conf文件以确定系统内核情况。根据文件显示,系统存在两个内核版本,分别为2.6.32-573.18.1.el6.x86_64和2.6.32-431.23.3.el6.x86_64。内核版本从上至下列出。在grub.conf文件中,可以通过调整default参数来决定系统启动时使用哪个内核版本。默认值为0,表示系统将启动最新的内核版本。值为0对应着grub.conf文件中列出的第一个内

安卓系统究竟是不是基于Linux内核?安卓系统作为目前全球使用最广泛的移动操作系统之一,一直以来都被称为基于Linux内核开发的。然而,真正的情况究竟如何呢?我们来探讨一下这个问题。首先,让我们了解一下Linux内核。Linux内核作为一个开源的操作系统内核,是由LinusTorvalds于1991年首次发布的。它为许多操作系统提供了良好的基础,包括And

Linux内核主函数解析与分析Linux内核是一个庞大而复杂的系统,其中的主函数起着至关重要的作用,它是整个系统的入口点,负责初始化各种子系统、驱动程序和内核模块,最终启动整个操作系统。本文将针对Linux内核主函数进行解析与分析,通过具体的代码示例来展示其关键功能和执行流程。在Linux内核中,主函数的入口点位于init/main.c文件中的start_k

标题:探究Linux内核底层所使用的编程语言Linux内核作为一个开源、稳定、可靠的操作系统内核,在计算机领域具有广泛的应用。而要深入了解Linux内核,就不得不涉及其底层所使用的编程语言。事实上,Linux内核主要是用C语言编写的,这是一个高效、灵活且易于维护的编程语言,非常适合用于操作系统的开发。本文将从细节的角度探究Linux内核底

Linux内核源代码存放位置详解Linux内核源代码是Linux操作系统的核心部分,它包含了操作系统的各种功能的实现代码。要了解Linux内核源代码的存放位置,我们首先需要了解Linux内核的组织结构。Linux内核源代码通常存放在/usr/src/linux或/usr/src/linux-目录下。在这个目录中,包含了丰

编译和安装Ubuntu内核需要一定的专业技能和实践经验。下面是一个大致的步骤,但请谨慎操作,因为此过程可能带来一定风险。在开始之前,请务必备份重要数据和系统。获取源代码:访问Ubuntu官方网站()或内核开发者网站()下载最新的内核源代码。解压源代码到一个合适的目录,如/usr/src。安装编译依赖:安装构建内核所需的依赖项。打开终端,执行以下命令:sudoapt-getinstallbuild-essentiallibncurses-devbisonflexlibssl-devlibelf-d

现在比较流行的系统是win10系统了,当然也有正在准备升级的用户,这些用户最关心的就是win10比win7性能有提升吗?其实整体来说还是有一些些提升的,兼容性也不错哦。win10比win7性能有提升吗:答:win10比win7性能是有提升的。整体的提升并不是很大,因为性能主要和硬件挂钩。但是win10系统进行了很多的优化因此可以更好的辅助。而且微软已经不支持win7的更新了,因此win10将会是后期最常见的系统。win10比win7对比特点:1、配置:win7已经推出了十几年的时间了,经过了很多
