在apache 2.2中正确使用ap_set_content_type()

时间:2014-01-02 16:24:29

标签: c++ c apache

我在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上运行。

1 个答案:

答案 0 :(得分:0)

我的猜测是,r->content_type只是指针,是您在ap_set_content_type中设置的内容,而您的content_type变量在您离开的函数中是本地的在发送回复之前。

如您所知,一旦函数返回,局部变量就会超出范围,并且所有指针都变为无效。