簡體   English   中英

如何在php擴展名中獲取請求標頭

[英]how to get request headers in php extensions

我想在php擴展名中獲取請求標頭,但使用&SG(sapi_headers).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,但是如何在請求中獲取自定義標頭?

這是獲取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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM