1. 程式人生 > >PHP程式的執行流程

PHP程式的執行流程

http://blogread.cn/it/article/5524?f=wb 為了以後能開發PHP擴充套件,就一定要了解PHP的執行順序。這篇文章就是為C開發PHP擴充套件做鋪墊。 Web環境我們假設為Apache。在編譯PHP的時候,為了能夠讓Apache支援PHP,我們會生成一個mod_php5.so的模組。Apache載入這個模組,在url訪問.php檔案的時候,就會轉給mod_php5.so模組來處理。這個就是我們常說的SAPI。英文名字是:Server Application Programming Interface。SAPI其實是一個統稱,其下有 ISAPI,CLI SAPI,CGI等。有了它,就可以很容易的跟其他東西互動,比如APACHE,IIS,CGI等。 Apache啟動後會將mod_pho5.so模組的hook handler註冊進來,當Apache檢測到訪問的url是一個php檔案時,這時候就會把控制權交給SAPI。進入到SAPI後,首先會執行sapi/apache/mod_php5.c 檔案的php_init_handler函式,這裡摘錄一段程式碼: ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 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);

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 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。

?

相關推薦

[轉]PHP執行流程,PHP擴展加載過程

nan air bing elong ges ava oop 過程 ssa Java%E5%9F%BA%E7%A1%80-OOP%E7%89%B9%E6%80%A7%E4%B9%8B%E5%B0%81%E8%A3%85%E3%80%81%E7%BB%A7%E6%89%BF%

ffplay程式執行流程分析

1、main()開始: 分別註冊編解碼器,複用以及解複用器 avcodec_register_all(); //register codec avdevice_register_all(); av_register_all(); //register demux a

Java虛擬機器-Java程式執行流程

一.概述程式執行流程我把它劃分為以下幾個步驟:編輯原始碼、編譯生成class檔案、(載入class檔案、執行class位元組碼檔案),其中後兩個步驟都是在jvm虛擬機器上執行的。 二.編輯編輯原始碼,在任何一個工具上編寫原始碼,可以是記事本,最後命名為Student.java

Nematus(二)程式執行流程分析

神經機器翻譯工具Nematus 程式執行流程分析 nematus/nmt.py/train (程式入口,從此函式開始分析) 1.1 讀取源語言和目標語言詞彙表 # 獲取設定的超引數引數 model_options

[深入理解JVM 一]---Java程式執行流程

本篇是《深入理解JVM》系列部落格的第一篇,旨在全域性把控,先對整體流程有個認識,然後再分階段詳解.本篇部落格大部分內容來自http://www.cnblogs.com/dqrcsc/p/4671879.htmljava一些地方重新進行了整理,根據自己的理解重新

PHP程式執行時間延長

1.程式碼中設定 ini_set('max_execution_time',0); ini_set('memory_limit', '2048M'); ignore_user_abort(true); // 客戶端斷開後,仍然繼續執行 //tp還應該開啟m

提效技巧 | PHP程式執行Linux下的SVN命令

在專案開發中,因為是內網伺服器(本文操作操作環境:Centos 6.5+PHP 7),每次更新都需要連上VPN才能svn up更新程式碼。周而復始的操作浪費了大量的開發時間,故決定用PHP實現通過訪問url的方式來更新服務端的程式碼版本。 網上也看到了很多寫法

PHP程式執行流程

http://blogread.cn/it/article/5524?f=wb 為了以後能開發PHP擴充套件,就一定要了解PHP的執行順序。這篇文章就是為C開發PHP擴充套件做鋪墊。 Web環境我們假設為Apache。在編譯PHP的時候,為了能夠讓Apache支援PHP,我們會生成一個mod_php5.

如何統計PHP程式執行時間、耗費記憶體

簡述 在專案開發中有時需要我們進行程式碼效率優化,這樣就需要知道我們的程式碼執行所需的時間,所佔用的記憶體等等問題。此篇博文就是簡單講一下如何統計PHP程式的執行時間和執行所需耗費的記憶體。 程式碼實現 <?php /** * ========================

PHP獲取程式執行時間

/** * @desc 獲取程式執行時間 * @param bool $time @傳此引數,代表獲取執行時間,不傳返回當前時間 * @param bool $format @當傳第一個引數時,此引數才起作用:是否返回字串ms * @param bool $numbe

Python——問一個web程式執行流程

在瀏覽器位址列中輸入 www.baidu.com,我們最終能夠看到百度的首頁,在這個過程中都發生了什麼? 簡單的概括這個過程的流程其實就只有兩句話:客戶端傳送請求,伺服器返回響應。 這兩句話是屬於業界大牛的回答,身為一個菜雞,我可不敢在面試的時候這麼說,色即是空,空即是色不屬於我,我還是

C# 程式執行中的流程控制

1、C#之流程控制語句:計算機程式執行的控制流程由三種基本的控制結構控制,即順序結構,選擇結構,迴圈結構。 1) 順序結構:從上到下,按照書寫順序執行每一條語句,不會發生跳躍。 程式碼段1; // 先執行程式碼段1 程式碼段2; // 接著執行程式碼段2 ... 2)選擇結構:對

MFC 程式入口和執行流程

一 MFC程式執行過程剖析 1)我們知道在WIN32API程式當中,程式的入口為WinMain函式,在這個函式當中我們完成註冊視窗類,建立視窗,進入訊息迴圈,最後由作業系統根據傳送到程式視窗的訊息呼叫程式的視窗函式。而在MFC程式當中我們不在能找到類似WinMain這樣的程式入口,取而代之的是一

PHP 程式一直執行,讓 伺服器 崩潰

<?php set_time_limit(0); //設定不超時,程式一直執行。 ignore_user_abort(true); //即使Client斷開(如關掉瀏覽器),PHP指令碼也可以繼續執行. $bool=1; $i=0; while($bool>=0){

微信小程式支付流程,非同步回撥及訊息模板呼叫(php原始碼)

首先還是老樣子把流程圖給大家發一下 商戶系統和微信支付系統主要互動: 1、小程式內呼叫登入介面,獲取到使用者的openid,api參見公共api【小程式登入API】 2、商戶server呼叫支付統一下單,api參見公共api【統一下單API】 3、商戶server呼叫再次簽

Java語言跨平臺的原理和Java程式執行流程

Java語言跨平臺的特殊性:       一般高階語言如要在不同的平臺上執行,需要編譯成不同的目的碼。引入Java虛擬機器後,Java語言在不同平臺上執行時不需要重新編譯。所以Java語言是跨平臺的,此特性也是基於Java虛擬機器的。 Java語言跨平臺性的實現原理:

Android原始碼解析(二十九)-->應用程式返回按鍵執行流程

從這篇文章中我們開始分析android系統的事件分發流程,其實網上已經有了很多關於android系統的事件分發流程的文章,奈何看了很多但是印象還不是很深,所以這裡總結一番。 android系統的事件分發流程分為很多部分: Native層 –> V

本地Spark程式提交到hadoop叢集執行流程

1.本地環境準備 本文是將eclipse開發環境下的maven+Spark+scala程式移植到叢集環境上執行過程,寫的很粗糙,見諒。 本地用eclipse編寫Spark小程式,完成從txt檔案讀取資料操作。 本地maven+Spark+scala環境就不多說了,如果配置出

計算機作業系統——程式執行流程

一個簡單的例子描述,程式從執行到結束作業系統都做了什麼 #include <stdio.h> int main() { printf("hello world"); }

shell指令碼定時執行php程式

其實很簡單的,在做開發的過程中可能會遇到一些情況需要定時得去跑一些程式,這時呢我們就可以用到這crontab這個定時器來幫助我們完成這些任務。 首先寫好你需要執行的php程式 我這裡呢就是一個PD