如何在php扩展名中获取请求标头

时间:2018-12-27 08:13:18

标签: php c

我想在php扩展名中获取请求标头,但使用&SG(sapi_headers)。标头似乎是在php扩展名中获取响应标头

我尝试用作

 static void agent_get_all_headers(){
         zend_llist_position pos;
         sapi_header_struct* h;

    for (h = (sapi_header_struct*)zend_llist_get_first_ex(&SG(sapi_headers).headers, &pos);h;h = (sapi_header_struct*)zend_llist_get_next_ex(&SG(sapi_headers).headers, &pos))
    {
         php_printf("SAPI! %.*s <br/>", h->header_len, h->header);
    }
 }

但不起作用

我使用代码

char *get_http_request_uri(){
  char *returnstr="";
  zval *tmp_name;
  if ((Z_TYPE(PG(http_globals)[TRACK_VARS_SERVER]) == IS_ARRAY || zend_is_auto_global_str(ZEND_STRL("_SERVER"))) &&
             (tmp_name = zend_hash_str_find(Z_ARRVAL(PG(http_globals)[TRACK_VARS_SERVER]), "REQUEST_URI", sizeof("REQUEST_URI")-1)) != NULL &&
             Z_TYPE_P(tmp_name) == IS_STRING) {
             returnstr = join3(returnstr,Z_STRVAL_P(tmp_name));
 }
 return returnstr;}

在php扩展中获取REQUEST_URI,但是如何在请求中获取自定义标头?

1 个答案:

答案 0 :(得分:0)

这里获取HTTP标头主机及其值。我们可以按照相同的方法读取自定义标头。

string Getheader()
    {
        string attribute="HTTP_HOST";
        HashTable *server;
    if (zend_hash_find(&EG(symbol_table), "_SERVER", 8, (void **)&arr) == FAILURE)
        {
            return L"";
        }
        server = Z_ARRVAL_PP(arr);

        zval **val;
        string temp = "";
        if (zend_hash_find(server, attribute.c_str(), strlen(attribute.c_str()) + 1, (void **)&val) != FAILURE && Z_TYPE_PP(val) == IS_STRING)
        {
            if (attribute != "HTTP_HOST")
                temp.append("#~#");
            temp.append("host");
            temp.append("=");
            temp.append(Z_STRVAL_PP(val));

        }
        return temp;
    }