[PHP] PHP与Apache的模块配合说明
1.當PHP需要在Apache服務器下運行時
一般來說,它可以mod_php5模塊的形式集成, 此時mod_php5模塊的作用是接收Apache傳遞過來的PHP文件請求,并處理這些請求, 然后將處理后的結果返回給Apache。
加載方式有兩種:Apache啟動時的加載,或者運行的時候動態裝載
2.Apache的運行過程
Apache的運行分為啟動階段和運行階段。 在啟動階段,Apache為了獲得系統資源最大的使用權限,將以特權用戶root(*nix系統)
并且整個過程處于一個單進程單線程的環境中。 這個階段包括配置文件解析(如http.conf文件)、模塊加載(如mod_php,mod_perl)和系統資源初始化(例如日志文件、共享內存段、數據庫連接等)等工作。在運行階段,Apache主要工作是處理用戶的服務請求。 在這個階段,Apache放棄特權用戶級別,使用普通權限,這主要是基于安全性的考慮,防止由于代碼的缺陷引起的安全漏洞。
通過Hook機制,將mod_php5的自定義函數注入請求處理循環中,參與php的處理
3.Apache2的mod_php5模塊說明
Apache中的module結構體,定義了很多成員
PHP中的mod_php5模塊,使用這個結構體定義,并賦值。其中有一個php_dir_cmds的成員,是個數組里面包括了幾個php的指令,例如:php_value,php_admin_value等
?
Apache定義的結構體:
typedef struct module_struct module; struct module_struct {int version;int minor_version;int module_index;const char *name;void *dynamic_load_handle;struct module_struct *next;unsigned long magic;void (*rewrite_args) (process_rec *process);void *(*create_dir_config) (apr_pool_t *p, char *dir);void *(*merge_dir_config) (apr_pool_t *p, void *base_conf, void *new_conf);void *(*create_server_config) (apr_pool_t *p, server_rec *s);void *(*merge_server_config) (apr_pool_t *p, void *base_conf, void *new_conf);const command_rec *cmds;void (*register_hooks) (apr_pool_t *p); }PHP中對結構體的賦值:
AP_MODULE_DECLARE_DATA module php5_module = {STANDARD20_MODULE_STUFF,/* 宏,包括版本,小版本,模塊索引,模塊名,下一個模塊指針等信息,其中模塊名以__FILE__體現 */create_php_config, /* create per-directory config structure */merge_php_config, /* merge per-directory config structures */NULL, /* create per-server config structure */NULL, /* merge per-server config structures */php_dir_cmds, /* 模塊定義的所有的指令 */php_ap2_register_hook/* 注冊鉤子,此函數通過ap_hoo_開頭的函數在一次請求處理過程中對于指定的步驟注冊鉤子 */ };const command_rec php_dir_cmds[] = {AP_INIT_TAKE2("php_value", php_apache_value_handler, NULL,OR_OPTIONS, "PHP Value Modifier"),AP_INIT_TAKE2("php_flag", php_apache_flag_handler, NULL,OR_OPTIONS, "PHP Flag Modifier"),AP_INIT_TAKE2("php_admin_value", php_apache_admin_value_handler,NULL, ACCESS_CONF|RSRC_CONF, "PHP Value Modifier (Admin)"),AP_INIT_TAKE2("php_admin_flag", php_apache_admin_flag_handler,NULL, ACCESS_CONF|RSRC_CONF, "PHP Flag Modifier (Admin)"),AP_INIT_TAKE1("PHPINIDir", php_apache_phpini_set, NULL,RSRC_CONF, "Directory containing the php.ini file"),{NULL} };我的練習:
1.C語言數組
int a[]={1,2,3,4};//整型數組
char *b[]={"tao","shi","han"};//字符串數組
printf("%d %s \n",a[2],b[0]);
2.typedef:給類型起一個別名
int main(){//定義結構體struct stu{char *name;int age;int (*sum)(int);};//給類型起個別名typedef struct stu STU;//1.定義結構體 STU student;student.age=10;student.name="taoshihan";printf("%s \n",student.name); }?
3.幾個預定義宏:
printf("%d\n",__LINE__);//返回當前行數
printf("%s\n",__FILE__);//返回當前源文件名稱
4.const:禁止修改變量的值,常量
總結
以上是生活随笔為你收集整理的[PHP] PHP与Apache的模块配合说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ES6中this的三种用法
- 下一篇: C++学习笔记第二天:几个知识点