[英]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.