首頁 後端開發 php教程 07-再次探討SAPI java api 1.8中文版 jquery api steam api64.dl

07-再次探討SAPI java api 1.8中文版 jquery api steam api64.dl

Jul 29, 2016 am 08:52 AM
api sap

在PHP的生命週期的各個階段,一些與服務相關的操作都是透過SAPI介面實現。 這些內建實現的物理位置在PHP源碼的SAPI目錄。這個目錄存放了PHP對各個伺服器抽象層的程式碼, 例如命令列程式的實現,Apache的mod_php模組實作以及fastcgi的實作等等。

在各個伺服器抽象層之間遵守著相同的約定,這裡我們稱之為SAPI介面。 每個SAPI實作都是一個_sapi_module_struct結構體變數。 (SAPI介面)。 在PHP的源碼中,當需要呼叫伺服器相關資訊時,全部透過SAPI介面中對應方法呼叫實現, 而這對應的方法在各個伺服器抽象層實現時都會有各自的實現。

下面是為SAPI的簡單示意圖:


sap2000 api,api原油数据公布,api原油库存,美国api原油数据,api,api数据对原油影响,原油里什么是api,百度地图api,api是什么,steam api.dll,api接口,java api,java api 1.8中文版,jquery api,steam api64.dl

以cgi模式和apache2伺服器為例,它們的啟動方法如下:

<code>cgi_sapi_module.startup(&cgi_sapi_module)   //  cgi模式 cgi/cgi_main.c文件

apache2_sapi_module.startup(&apache2_sapi_module);
 //  apache2服务器  apache2handler/sapi_apache2.c文件
</code>
登入後複製

這裡的cgi_sapi_module是靜態變數的變數。 它的startup方法指向php_cgi_startup函數指標。在這個結構體中除了startup函數指針,還有許多其它方法或字段。 其部分定義如下:

<code>struct _sapi_module_struct {
    char *name;         //  名字(标识用)
    char *pretty_name;  //  更好理解的名字(自己翻译的)

    int (*startup)(struct _sapi_module_struct *sapi_module);    //  启动函数
    int (*shutdown)(struct _sapi_module_struct *sapi_module);   //  关闭方法

    int (*activate)(TSRMLS_D);  // 激活
    int (*deactivate)(TSRMLS_D);    //  停用

    int (*ub_write)(const char *str, unsigned int str_length TSRMLS_DC);
     //  不缓存的写操作(unbuffered write)
    void (*flush)(void *server_context);    //  flush
    struct stat *(*get_stat)(TSRMLS_D);     //  get uid
    char *(*getenv)(char *name, size_t name_len TSRMLS_DC); //  getenv

    void (*sapi_error)(int type, const char *error_msg, ...);   /* error handler */

    int (*header_handler)(sapi_header_struct *sapi_header, sapi_header_op_enum op,
        sapi_headers_struct *sapi_headers TSRMLS_DC);   /* header handler */

     /* send headers handler */
    int (*send_headers)(sapi_headers_struct *sapi_headers TSRMLS_DC);

    void (*send_header)(sapi_header_struct *sapi_header,
            void *server_context TSRMLS_DC);   /* send header handler */

    int (*read_post)(char *buffer, uint count_bytes TSRMLS_DC); /* read POST data */
    char *(*read_cookies)(TSRMLS_D);    /* read Cookies */

    /* register server variables */
    void (*register_server_variables)(zval *track_vars_array TSRMLS_DC);

    void (*log_message)(char *message);     /* Log message */
    time_t (*get_request_time)(TSRMLS_D);   /* Request Time */
    void (*terminate_process)(TSRMLS_D);    /* Child Terminate */

    char *php_ini_path_override;    //  覆盖的ini路径

    ...
    ...
};
</code>
登入後複製

以上的這些結構在各伺服器的介面實作中都有定義。如Apache2的定義:

<code>static sapi_module_struct apache2_sapi_module = {
    "apache2handler",
    "Apache 2.0 Handler",

    php_apache2_startup,                /* startup */
    php_module_shutdown_wrapper,            /* shutdown */

    ...
}
</code>
登入後複製

目前PHP內建的許多SAPI實作都已不再維護或變的有些非主流了,PHP社群目前正在考慮將一些SAPI移出程式碼庫。 社群對許多功能的考慮是除非真的非常必要,或者某些功能已近非常通用了,否則就在PECL庫中, 例如非常流行的APC快取擴充將進入核心程式碼庫中。

整個SAPI類似於一個物件導向中的模板方法模式的應用。 SAPI.c和SAPI.h檔案所包含的一些函數就是模板方法模式中的抽像模板, 各個伺服器對於sapi_module的定義及相關實作則是一個個具體的模板。

這樣的結構在PHP的原始碼中有多處使用, 例如在PHP擴充開發中,每個擴充都需要定義一個zend_module_entry結構體。 這個結構體的作用與sapi_module_struct結構體類似,都是類似模板方法模式的應用。 在PHP的生命週期中如果需要呼叫某個擴展,其呼叫的方法都是zend_module_entry結構體中指定的方法, 如在上一小節中提到的在執行各個擴展的請求初始化時,都是統一調用request_startup_func方法, 而在每個擴充的定義時,都透過巨集PHP_RINIT指定request_startup_func對應的函數。 以VLD擴展為例:其請求初始化為PHP_RINIT(vld),與之對應在擴展中需要有這個函數的實現:

<code>PHP_RINIT_FUNCTION(vld) {
}
</code>
登入後複製

所以, 我們在寫擴展時也需要實現擴展的這些接口,同樣,當實現各伺服器介面時也需要實現其對應的SAPI。

')​​.addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介紹了07-再次探討SAPI,包含了api,sap方面的內容,希望對PHP教學有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
如何在PHP專案中透過呼叫API介面來實現資料的爬取與處理? 如何在PHP專案中透過呼叫API介面來實現資料的爬取與處理? Sep 05, 2023 am 08:41 AM

如何在PHP專案中透過呼叫API介面來實現資料的爬取與處理?一、介紹在PHP專案中,我們經常需要爬取其他網站的數據,並對這些數據進行處理。而許多網站提供了API接口,我們可以透過呼叫這些接口來取得資料。本文將介紹如何使用PHP來呼叫API接口,實現資料的爬取與處理。二、取得API介面的URL和參數在開始之前,我們需要先取得目標API介面的URL以及所需的

Oracle API使用指南:探索資料介面技術 Oracle API使用指南:探索資料介面技術 Mar 07, 2024 am 11:12 AM

Oracle是一家全球知名的資料庫管理系統供應商,其API(ApplicationProgrammingInterface,應用程式介面)是一種強大的工具,可協助開發人員輕鬆地與Oracle資料庫互動和整合。在本文中,我們將深入探討OracleAPI的使用指南,向讀者展示如何在開發過程中利用資料介面技術,同時提供具體的程式碼範例。 1.Oracle

Oracle API整合策略解析:實現系統間無縫通信 Oracle API整合策略解析:實現系統間無縫通信 Mar 07, 2024 pm 10:09 PM

OracleAPI整合策略解析:實現系統間無縫通信,需要具體程式碼範例在當今數位化時代,企業內部系統之間需要相互通信和資料共享,而OracleAPI就是幫助實現系統間無縫通信的重要工具之一。本文將從OracleAPI的基本概念和原則入手,探討API整合的策略,最終給出具體的程式碼範例幫助讀者更好地理解和應用OracleAPI。一、OracleAPI基本

React API呼叫指南:如何與後端API互動和資料傳輸 React API呼叫指南:如何與後端API互動和資料傳輸 Sep 26, 2023 am 10:19 AM

ReactAPI呼叫指南:如何與後端API進行互動和資料傳輸概述:在現代的Web開發中,與後端API進行互動和資料傳輸是一個常見的需求。 React作為一個流行的前端框架,提供了一些強大的工具和功能來簡化這個過程。本文將介紹如何使用React來呼叫後端API,包括基本的GET和POST請求,並提供具體的程式碼範例。安裝所需的依賴:首先,確保在專案中安裝了Axi

開發建議:如何利用ThinkPHP框架進行API開發 開發建議:如何利用ThinkPHP框架進行API開發 Nov 22, 2023 pm 05:18 PM

開發建議:如何利用ThinkPHP框架進行API開發隨著網際網路的不斷發展,API(ApplicationProgrammingInterface)的重要性也日益凸顯。 API是不同應用程式之間進行通訊的橋樑,它可以實現資料共享、功能呼叫等操作,為開發者提供了相對簡單且快速的開發方式。而ThinkPHP框架作為一款優秀的PHP開發框架,具有高效能、可擴展且易用

如何處理Laravel API報錯問題 如何處理Laravel API報錯問題 Mar 06, 2024 pm 05:18 PM

標題:如何處理LaravelAPI報錯問題,需要具體程式碼範例在進行Laravel開發時,常會遇到API報錯的情況。這些報錯可​​能來自於程式碼邏輯錯誤、資料庫查詢問題或是外部API請求失敗等多種原因。如何處理這些報錯是一個關鍵的問題,本文將透過具體的程式碼範例來示範如何有效處理LaravelAPI報錯問題。 1.錯誤處理在Laravel

什麼是sap 什麼是sap Sep 13, 2023 pm 04:41 PM

sap是一家德國的軟體公司,也是世界上最大的企業管理軟體公司之一,專注於提供企業資源規劃和相關軟體解決方案。其成立於1972年,總部位於德國沃爾多夫市,最初SAP的主要業務是為德國企業提供財務會計軟體。隨著公司的不斷發展,SAP逐漸擴展了產品線,涵蓋了物流、供應鏈管理、人力資源管理、銷售與分銷等領域,SAP的軟體解決方案仍然是全球企業管理軟體市場的領導者之一。

Insomnia教學:如何使用PHP API介面 Insomnia教學:如何使用PHP API介面 Jan 22, 2024 am 11:21 AM

PHPAPI介面:如何使用InsomniaInsomnia是一款功能強大的API測試和偵錯工具,它能夠幫助開發者快速、方便地測試和驗證API接口,支援多種程式語言和協議,其中包括PHP。本文將介紹如何使用Insomnia測試PHPAPI介面。第一步:安裝InsomniaInsomnia是一款跨平台的應用程序,支援Windows、MacOS和Linux等

See all articles