在 main/SAPI.h 下定义了会使用到的 HTTP Request 属性,在扩展中可以引用该头文件并使用 SG 宏来使用 SAPI 的全局变量,结构如下:

typedef struct _sapi_globals_struct {

void *server_context;

sapi_request_info request_info; // 请求信息

sapi_headers_struct sapi_headers;

int64_t read_post_bytes;

unsigned char post_read;

unsigned char headers_sent;

zend_stat_t global_stat;

char *default_mimetype;

char *default_charset;

HashTable *rfc1867_uploaded_files;

zend_long post_max_size;

int options;

zend_bool sapi_started;

double global_request_time;

HashTable known_post_content_types;

zval callback_func;

zend_fcall_info_cache fci_cache;

} sapi_globals_struct;

结构体 sapi_request_info 结构如下:

typedef struct {

const char *request_method; // 请求方法,如 GET / POST / PUT 这些

char *query_string; // Query 字符串,就是 url ? 问号后面的 GET 参数

char *cookie_data; // Cookie 串

zend_long content_length; // 请求长度

char *path_translated;

char *request_uri; // 请求 URI

struct _php_stream *request_body;

const char *content_type; // 内容类型

zend_bool headers_only;

zend_bool no_headers;

zend_bool headers_read;

sapi_post_entry *post_entry; // Post 内容

char *content_type_dup;

/* for HTTP authentication */ // 下面三个用于 HTTP 验证

char *auth_user;

char *auth_password;

char *auth_digest;

/* this is necessary for the CGI SAPI module */

char *argv0;

char *current_user;

int current_user_length;

/* this is necessary for CLI module */

int argc;

char **argv;

int proto_num;

} sapi_request_info;

比如我现在要获取是否为 POST 请求,那么

/* {{{ proto bool isPost(void) */

PHP_FUNCTION(isPost)

{

if (!SG(request_info).request_method) {

RETURN_FALSE;

}

RETURN_BOOL(0 == strcasecmp(SG(request_info).request_method, "POST"));

}

/* }}} */

php 获取请求,PHP 扩展 - 获取请求信息相关推荐

  1. php 打印请求头,PHP获取当前所有请求头信息

    在开发借口满天飞的现在,我们经常要写接口.而接口的连接大部分都依赖HTTP.在PHP中我比较熟悉的是用curl方法去写HTTP请求.当然,这是发送HTTP请求的. 今天我要讲的是我们作为验证方,接收H ...

  2. python 客户端 如何获取手机_Python学习---Django的request扩展[获取用户设备信息]

    关于Django的request扩展[获取用户设备信息] settings.py INSTALLED_APPS = [ ... 'app01', # 注册app ] STATICFILES_DIRS ...

  3. Python学习---Django的request扩展[获取用户设备信息]

    关于Django的request扩展[获取用户设备信息] settings.py INSTALLED_APPS = [...'app01', # 注册app ] STATICFILES_DIRS = ...

  4. PHP 发送HTTP post请求发送和获取

    发送POST请求 和GET方法一样,POST方法也是HTTP协议中的一个重要组成部分.POST方法一般用来向目的服务器发出请求,并附有请求实体. POST被设计成用统一的方法实现下列功能:      ...

  5. 抓取html对象插件,chrome扩展获取页面dom对象信息

    chrome扩展,在popup页面,给页面对象绑定点击事件,获取当前tab加载页面的DOM对象信息.本chrome扩展功能主要用于获取百度搜索输入框中用户输入的关键字.效果如下 源代码如下注意:以下文 ...

  6. SpringMVC之请求参数的获取方式

    转载出处:https://www.toutiao.com/i6510822190219264516/ SpringMVC之请求参数的获取方式 常见的一个web服务,如何获取请求参数? 一般最常见的请求 ...

  7. [转]Asp.Net 上传大文件专题(3)--从请求流中获取数据并保存为文件[下]

    转自:http://www.cnblogs.com/stg609/archive/2008/08/03/1259206.html 接着上一篇讲 3.4 读取剩余的请求       前面我们已经提到过R ...

  8. Asp.Net 上传大文件专题(3)--从请求流中获取数据并保存为文件[下]

        接着上一篇讲 3.4 读取剩余的请求       前面我们已经提到过ReadEntityBody (Byte[] buffer, Int32 size)方法,该方法可以用来读取客户端的请求数据 ...

  9. vue一级分类和耳机分类_【Vue+DRF生鲜电商】10.商品分类层级获取,Vue跨域请求商品分类...

    欢迎访问我的博客专题 源码可访问 Github 查看 DRF实现商品分类获取 实现商品分类层级结构显示 商品类别ViewSet 在商品类别中,不需要对类别进行分页,因为类别的数据量不大,只要在数据量很 ...

最新文章

  1. Nature:人类肠道微生物组的肠型
  2. 在移动端禁用长按选中文本功能
  3. POJ 2049 Finding Nemo BFS
  4. Android 添加菜单项
  5. 5号发工资和25号发工资,真能看出公司是否靠谱?
  6. decltype判断变量或表达式类型
  7. 信息系统项目管理师-招投标法、政府采购法核心知识点思维脑图
  8. 数字图像处理——引导滤波
  9. King Gym - 102471H
  10. Brackets(POJ-2955)
  11. u-boot移植随笔:解决引导内核遇到undefined instruction的错误
  12. 【报告分享】2020企业精细化运营白皮书.pdf(附下载链接)
  13. 6.Python学习笔记:[enumerate元素加序号;isdigit()像数字;len()计算长度]
  14. linux 挂在windows共享文件夹
  15. STC学习:八位数码管+流水灯
  16. Python线程池简介
  17. duilib加载资源
  18. oracle vm.drop_caches,墨菲定律一个参数Drop_caches导致集群数据库实例崩溃
  19. Win10鼠标右键菜单选项提示找不到应用程序解决方法
  20. 4G DTU和4G工业路由器有哪些区别?

热门文章

  1. GRTN赋能淘系内容业务的演进路线及未来规划
  2. 音视频技术开发周刊 | 144
  3. 一站式体验腾讯云音视频及融合通信技术
  4. Spark之Spark角色介绍及运行模式
  5. 腾讯抗黑灰产——自监督发现行话黑词识别一词多义
  6. 腾讯基于全时态数据库技术的数据闪回
  7. python 字典字符串转字典——urllib.request.Request发送get,post请求,发送json参数
  8. GO tcp server demo
  9. QTWebEngine的使用
  10. 听腾讯 TEG 大佬谈腾讯万亿级 Elasticsearch 技术解密