PHP PHP伺服器介面SAPI中的結構體

2021-09-27 09:05:58 字數 2406 閱讀 9244

sapi:在各個伺服器抽象層之間遵守著相同的約定,這裡我們稱之為sapi介面。例如命令列程式的實現,apache的mod_php模組實現以及fastcgi的實現等等

1.結構體:

使用結構體(struct)來存放一組不同型別的資料

struct 結構體名;

struct 結構體名 結構體變數名

2.成員的獲取和賦值

結構體變數名.成員名;

3.結構體指標

struct 結構體名 *結構體變數名=&結構體變數名

使用結構體指標 ==> (*結構體變數名).成員名 ; 結構體變數名->成員名

php原始碼:

struct

_sapi_module_struct ;

cgi_sapi_module.startup(&cgi_sapi_module) //

cgi模式 cgi/cgi_main.c檔案

apache2_sapi_module.startup(&apache2_sapi_module); //

apache2伺服器 apache2handler/sapi_apache2.c檔案

static sapi_module_struct apache2_sapi_module =

startup 當sapi初始化時,首先會呼叫該函式。如果伺服器處理多個請求時,該函式只會呼叫一次。 比如apache的sapi,它是以mod_php5的apache模組的形式載入到apache中的, 在這個sapi中,startup函式只在父程序中建立一次,在其fork的子程序中不會呼叫。

activate 此函式會在每個請求開始時呼叫,它會再次初始化每個請求前的資料結構。

deactivate 此函式會在每個請求結束時呼叫,它用來確保所有的資料都,以及釋放在activate中初始化的資料結構。

shutdown 關閉函式,它用來釋放所有的sapi的資料結構、記憶體等。

ub_write 不快取的寫操作(unbuffered write),它是用來將php的資料輸出給客戶端, 如在cli模式下,其最終是呼叫fwrite實現向標準輸出輸出內容;在apache模組中,它最終是呼叫apache提供的方法rwrite。

sapi_error 報告錯誤用,大多數的sapi都是使用的php的預設實現php_error。

flush 重新整理輸出,在cli模式下通過使用c語言的庫函式fflush實現,在php_mode5模式下,使用apache的提供的函式函式rflush實現。

read_cookie 在sapi啟用時,程式會呼叫此函式,並且將此函式獲取的值賦值給sg(request_info).cookie_data。 在cli模式下,此函式會返回null。

read_post 此函式和read_cookie一樣也是在sapi啟用時呼叫,它與請求的方法相關,當請求的方法是post時,程式會操作$_post、$http_raw_post_data等變數。

send_header 傳送頭部資訊,此方法一般的sapi都會定製,其所不同的是,有些的會調伺服器自帶的(如apache),有些的需要你自己實現(如 fastcgi)。

我的練習:

#include int hello(int

a)int

main();

//1.賦值結構體

struct

stu student;

student.age=10

; student.name="

taoshihan";

student.sum=hello;

//使用結構體成員

printf("

%d \n

",student.sum(20

));

//2.另一種賦值結構體方式

struct stu lstudent=;

printf(

"%s \n

",lstudent.name);

printf(

"%d \n

",lstudent.sum(30

));

//3.結構體指標

struct stu *rstudent=&student;

//使用結構體指標

printf("

%s \n

",(*rstudent).name);

printf(

"%s \n

",rstudent->name);

//定義函式指標

int (*h)(int)=hello;

//使用函式指標

printf("

%d \n

",(*h)(20

));}

伺服器寫介面

準備 阿里雲伺服器一台 系統 windows 2008 64位 環境 jdk tomcat mysql安裝並配置好環境 1.修改tomcat cong server.xml下的預設埠從8080修改為80 2.tomcat bin startup啟動tomcat 3.在客戶端瀏覽器上輸入 123.56...

socket TCP伺服器介面

如下,操作在後 include resource1.h include pragma comment lib,ws2 32.lib define default iport 5000 lresult callback dialproc hwnd hwnd,uint umsg,wparam wpara...

推送php PHP實現網頁與遠端伺服器TCP互動

最近參與了乙個物聯網的專案,場景 有多台裝置通過tcp與伺服器連線,要求客戶在遠端用網頁對裝置進行管理。網頁不直接控制硬體,而是將伺服器當成乙個中轉站。網頁發出指令,送到伺服器,伺服器再將這些指令送到相應的裝置,反之亦然,裝置將指令傳送至伺服器,伺服器再將裝置指令推送到網頁。筆者負責網頁端與遠端伺服...