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脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++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-目錄下。在這個目錄中,包含了豐

現在比較受歡迎的系統是win10系統了,當然也有正在準備升級的用戶,這些用戶最關心的就是win10比win7效能有提升嗎?其實整體來說還是有一些些提升的,相容性也不錯哦。 win10比win7性能有提升嗎:答:win10比win7性能是有提升的。整體的提升並不是很大,因為性能主要和硬體掛鉤。但是win10系統進行了很多的優化因此可以更好的輔助。而且微軟已經不支援win7的更新了,因此win10將會是後期最常見的系統。 win10比win7對比特色:1、配置:win7已經推出了十幾年的時間了,經過了很多

前言LINUX,這個開源的作業系統,一直以來都在為全球的開發者提供穩定而強大的環境,不論是伺服器,還是嵌入式設備,甚至是超級計算機,Linux都發揮著關鍵的作用,為了滿足不同的需求,我們常常需要對Linux核心進行客製化與安裝,我們就以Debian系統為例,探討如何安裝核心以及核心頭檔。 Debian安裝核心在Debian系統中,安裝新的核心相對直接,可以透過apt指令進行,你需要更新你的套件列表,執行以下指令:```sqlsudoapt-getupdate```你可以使用以下指令來安裝新的內核:s
