我在apache 2.2模块中使用ap_set_content_type()函数时遇到了一些麻烦。 以下代码位于我的模块处理函数调用的函数中。
std::string type = "text/html";
char content_type[50] = "text/plain";
if (type != "")
{
memset(content_type, 0, 50);
type.copy(content_type, 50);
}
ap_set_content_type(r, content_type);
ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_NOTICE, 0, r->server,
"content-type = %s, then content-type = %s",
content_type, r->content_type);
如果没有指定其他类型,则意图是“text / plain”是默认值,并且字符串type
将来会改变值。
正如我所料,日志条目在两种情况下都显示为“text / html”,但是当标题到达客户端时它已被加扰,并且大多数似乎包含特殊字符,通常会扩展ASCII。
我还应该指出,这个函数是使用C ++链接的,特定于apache的代码段位于extern "C"
块中。
知道我做错了什么吗?到目前为止,我还没有找到很多关于apache模块API的文档,所以这里有一个猜测元素。
此代码仅在linux上运行。
答案 0 :(得分:0)
我的猜测是,r->content_type
只是指针,是您在ap_set_content_type
中设置的内容,而您的content_type
变量在您离开的函数中是本地的在发送回复之前。
如您所知,一旦函数返回,局部变量就会超出范围,并且所有指针都变为无效。