我想在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,但是如何在请求中获取自定义标头?
答案 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;
}