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");   }  

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Pour installer le noyau Linux sur Ubuntu22.04, vous pouvez suivre les étapes suivantes : Mettre à jour le système : Tout d'abord, assurez-vous que votre système Ubuntu est le dernier, exécutez la commande suivante pour mettre à jour le package système : sudoaptupdatesudoaptupgrade Téléchargez le fichier du noyau : Visitez le Site Web officiel du noyau Linux () pour télécharger la version requise du noyau. Sélectionnez une version stable et téléchargez le fichier de code source (avec l'extension .tar.gz ou .tar.xz), par exemple : wget Décompressez le fichier : Utilisez la commande suivante pour décompresser le fichier de code source du noyau téléchargé : tar-xflinux-5.14 .tar.xz install build dependencies : installez les outils et les dépendances requis pour construire le noyau. Exécuter

Modifier la séquence de démarrage du noyau de Linux 1. Modifiez la séquence de démarrage du noyau de RHEL6/CentOS6 Vérifiez le fichier /etc/grub.conf pour déterminer la situation du noyau du système. Selon le document, il existe deux versions de noyau dans le système, à savoir 2.6.32-573.18.1.el6.x86_64 et 2.6.32-431.23.3.el6.x86_64. Les versions du noyau sont répertoriées de haut en bas. Dans le fichier grub.conf, vous pouvez décider quelle version du noyau utiliser au démarrage du système en ajustant les paramètres par défaut. La valeur par défaut est 0, ce qui signifie que le système démarrera la dernière version du noyau. Une valeur de 0 correspond au premier contenu répertorié dans le fichier grub.conf.

Le système Android est-il basé sur le noyau Linux ? Le système Android, l'un des systèmes d'exploitation mobiles les plus utilisés au monde, a toujours été considéré comme développé sur la base du noyau Linux. Mais quelle est la situation réelle ? Explorons cette question. Commençons par découvrir le noyau Linux. Le noyau Linux, en tant que noyau de système d'exploitation open source, a été publié pour la première fois par Linus Torvalds en 1991. Il constitue une bonne base pour de nombreux systèmes d'exploitation, notamment And

Analyse et analyse des fonctions principales du noyau Linux Le noyau Linux est un système vaste et complexe, dans lequel la fonction principale joue un rôle essentiel. Elle est le point d'entrée de l'ensemble du système et est responsable de l'initialisation de divers sous-systèmes, pilotes et modules du noyau. démarrez tout le système d’exploitation. Cet article analysera et analysera la fonction principale du noyau Linux, et démontrera ses fonctions clés et son flux d'exécution à travers des exemples de code spécifiques. Dans le noyau Linux, le point d'entrée de la fonction main est start_k dans le fichier init/main.c.

Titre : Exploration du langage de programmation utilisé à la base du noyau Linux En tant que noyau de système d'exploitation open source, stable et fiable, le noyau Linux possède un large éventail d'applications dans le domaine informatique. Pour avoir une compréhension approfondie du noyau Linux, vous devez impliquer le langage de programmation utilisé à son niveau sous-jacent. En fait, le noyau Linux est principalement écrit en langage C, qui est un langage de programmation efficace, flexible et facile à maintenir, très adapté au développement de systèmes d'exploitation. Cet article explorera le bas du noyau Linux d'un point de vue détaillé

Explication détaillée de l'emplacement de stockage du code source du noyau Linux Le code source du noyau Linux est la partie essentielle du système d'exploitation Linux. Il contient le code d'implémentation de diverses fonctions du système d'exploitation. Pour comprendre où est stocké le code source du noyau Linux, nous devons d’abord comprendre la structure organisationnelle du noyau Linux. Le code source du noyau Linux est généralement stocké dans le répertoire /usr/src/linux ou /usr/src/linux-. Dans ce répertoire, il y a beaucoup

La compilation et l'installation du noyau Ubuntu nécessitent certaines compétences professionnelles et une expérience pratique. Voici les étapes générales, mais veuillez procéder avec prudence car ce processus peut comporter certains risques. Avant de commencer, assurez-vous de sauvegarder les données et les systèmes importants. Obtenez le code source : visitez le site Web officiel d'Ubuntu () ou le site Web des développeurs du noyau () pour télécharger le dernier code source du noyau. Décompressez le code source dans un répertoire approprié, tel que /usr/src. Installer les dépendances de compilation : installez les dépendances requises pour construire le noyau. Ouvrez un terminal et exécutez la commande suivante : sudoapt-getinstallbuild-essentiallibncurses-devbisonflexlibssl-devlibelf-d

Le système le plus populaire est désormais le système Win10. Bien sûr, il y a aussi des utilisateurs qui se préparent à effectuer une mise à niveau. Ce qui préoccupe le plus ces utilisateurs, c'est de savoir si les performances de Win10 sont améliorées par rapport à Win7 ? En fait, dans l’ensemble, il y a encore quelques améliorations et la compatibilité est également bonne. Les performances de Win10 sont-elles améliorées par rapport à Win7 ? Réponse : Les performances de Win10 sont améliorées par rapport à Win7. L'amélioration globale n'est pas très grande, car les performances sont principalement liées au matériel. Cependant, le système Win10 a subi de nombreuses optimisations afin de pouvoir fournir une meilleure assistance. De plus, Microsoft ne prend plus en charge les mises à jour Win7, Win10 sera donc le système le plus courant à l'avenir. Caractéristiques comparatives de win10 par rapport à win7 : 1. Configuration : win7 est lancé depuis plus de dix ans et a traversé beaucoup de choses.
