专栏首页陶士涵的菜地[PHP] PHP与Apache的模块配合说明

[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:禁止修改变量的值,常量

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [PHP] CentOS下搭建下PHP的运行环境

    在公司里面有分配的测试机,所有的开发代码都运行在测试机里面.因为公司的测试机机房退租,所以要在新申请的几台测试机上搭建开发环境.开发环境尽量做到和线上的环境一致...

    陶士涵
  • [PHP] error_reporting(0)可以屏蔽Fatal error错误

    按照以前的印象,error_reporting(0)屏蔽不了php的Fatal error级别的错误。 但是今天我遇到了一个问题才发现,它竟然可以屏蔽任何错误,...

    陶士涵
  • [日常] windows下使用vscode配合xebug调试php脚本

    要下载有php_xebug.dll扩展的版本,最新版可能没有这个扩展,php7.3应该是有的,php7.3.4好像没有 默认是不加载这个扩展的,需要在php.i...

    陶士涵
  • 第二次实战演习记录

    开放端口:利用fofa查件搜集一波,nmap搜集到135、139、445是filtered状态

    天钧
  • Mac系统配置php环境

    此文是之前在CSDN上写的一篇博客,今天心血来潮,将其转移至简书平台,原文链接:http://blog.csdn.net/wj_november/article...

    代码咖啡
  • 依托illuminate组件实现数据库迁移(后续)

    这段时间一直在思考,想着把迁移功能给独立出来。所以还是按照Laravel的模式重新写了一版并提交到了 GitHub 中,另外 Packagist 也发布了。

    魔王卷子
  • Siteground如何升级php版本

    Siteground如何升级php版本?siteground的php默认版本是php5.6,而根据php官方的说法,升级到php较新版本可以大大增加php性能发...

    魏艾斯博客www.vpsss.net
  • centos7 PHP环境搭建 GD库 等插件安装方法

    查了资料,说法是,CentOS7用的是Firewall-cmd,CentOS7之前用的是iptables防火墙;要想让外网能访问到apache主目录,就需要做以...

    砸漏
  • Linux基于php-fpm模式的lamp搭建phpmyadmin的方法

    lamp指的Linux(操作系统)、ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和PHP(有时也是指Perl或Python)...

    砸漏
  • 详解no input file specified 三种解决方法

    方法一:改PHP.ini中的doc_root行,打开ini文件注释掉此行,然后重启IIS

    砸漏

扫码关注云+社区

领取腾讯云代金券