php可以做嵌入式嗎,嵌入式PHP

2021-10-25 22:34:51 字數 1898 閱讀 5029

從第一章中對php原始碼目錄結構的介紹以及php生命週期章節中可以看出,嵌入式php類似cli,是sapi介面的另一種實現。 一般情況下,它的乙個請求的生命週期也會和其它的sapi一樣:模組初始化=>請求初始化=>處理請求=>關閉請求=>關閉模組。當然,這只是理想情況。 但是嵌入式php的請求可能包括一段或多段**,這就導致了嵌入式php的特殊性。

對於嵌入式php或許我們了解比較少,或者說根本用不到,甚至在網上相關的資料也不多, 所幸我們在《extending and embedding php》這本書上找到了一些資料。 這一小節,我們從這本書的乙個示例說起,介紹php對於嵌入式php的支援以及php為嵌入式提供了哪些介面或功能。 首先我們看下所要用到的示例原始碼:

#include

#ifdef zts

void ***tsrm_ls;

#endif

/* extension bits */

zend_module_entry php_mymod_module_entry = ;

php_embed_init(argc, ar** ptsrmls_cc);

zend_startup_module(&php_mymod_module_entry);

static void execute_php(char *filename)

zend_first_try zend_end_try();

int main(int argc, char *ar**)

if (argc <= 1) ;

php_embed_init(argc, ar** ptsrmls_cc);

zend_startup_module(&php_mymod_module_entry);

這個函式呼叫了兩個函式php_embed_init和zend_startup_module完成初始化工作。 php_embed_init函式定義在sapi/embed/php_embed.c檔案中。它完成了php對於嵌入式的初始化支援。 zend_startup_module函式是php的內部api函式,它的作用是註冊定義的模組,這裡是註冊mymod模組。 這個註冊過程僅僅是將所定義的zend_module_entry結構新增到註冊模組列表中。

execute_php函式:

static void execute_php(char *filename)

zend_first_try zend_end_try();

從函式的名稱來看,這個函式的功能是執行php**的。 它通過呼叫sprrintf函式構造乙個include語句,然後再呼叫zend_eval_string函式執行這個include語句。 zend_eval_string最終是呼叫zend_eval_stringl函式,這個函式是流程是乙個編譯php**,生成zend_op_array型別資料,並執行opcode的過程。 這段程式相當於下面的這段php程式, 這段程式可以用php命令來執行,雖然下面這段程式沒有實際意義,而通過嵌入式php中,你可以在乙個用c實現的 系統中嵌入php, 然後用php來實現功能。

if($argc < 2) die("usage: embed4 scriptfile");

include $ar**[1];

main函式:

int main(int argc, char *ar**)

if (argc <= 1) zend_catch zend_end_try(); \

php_embed_shutdown(tsrmls_c); \

如上兩個巨集可能會用到你的嵌入式php中,從**中可以看出,它包含了在示例**中的php_embed_init,zend_first_try,zend_end_try,php_embed_shutdown等 嵌入式php中常用的方法。 大量的使用巨集也算是php原始碼的一大特色吧,

參與資料

《extending and embedding php》

初識嵌入式 嵌入式開發概述

1 什麼是嵌入式技術 1 嵌入式軟體與非嵌入式軟體的區別?答 嵌入式軟體是結合作業系統之上做的開發 非嵌入式軟體是做的裸機開發。裸機 沒有作業系統 2 嵌入式開發與微控制器開發的區別?答 區別 是否有作業系統。拓展 答 優點 解決了軟體的移植性 解決了開發人員的能力的劃分問題。提供了豐富的網路協議 ...

如何學習嵌入式 嵌入式如何入門?

學習嵌入式,該學習什麼基本的知識呢?嵌入式如何入門?其次,應該對作業系統有所了解,這對你對硬體和軟體的理解,絕對有很大的幫助。應該把系統的管理理解一下,比如程序 執行緒,系統如何來分配資源的,系統如何來管理硬體的,當然,不是看書就能把這些理解透,如果不是一時能理解,沒關係,多看看,結合以後的專案經驗...

非嵌入式與嵌入式的區別

非嵌入式是通過軟體控制硬體,軟硬體之間直接聯絡來實現要求。但是一旦硬體發生改變軟體也要改變,為了降低這種偶合度過高的問題,出現了嵌入式。嵌入式在軟體和硬體之間新增了作業系統,軟體通過控制作業系統進而控制硬體,硬體發生改變並不會導致軟體也發生改變,這為軟體開發人員節約了很多時間,並且嵌入式能在已有的硬...