猿问

文件中显示 exit signal Segmentation fault(11) 无法读到post?

写了一个input filter 用来得到所有用户输入的post请求,filter内代码如下:
if( r->method_number==M_POST ){
if(ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK) == OK ){
if( 1 == ap_should_client_block(r)){
while ((nbytes = ap_get_client_block(r, cbuf, sizeof(cbuf))) > 0){
cbuf[nbytes]='\0';
ap_log_rerror(APLOG_MARK, APLOG_ERR,0,r,"get query string: %s ",cbuf); //输出到error文件里
}
}
}
rv= ap_get_brigade(f->next,bb,mode,block,readbytes); //传给下一个filter
return rv;

}
}
}
rv= ap_get_brigade(f->next,bb,mode,block,readbytes); //传给下一个filter
return rv;
}
但error文件中始终显示
exit signal Segmentation fault(11)
无法读到post。
用的是Linux下的apache2.2
麻烦大牛们帮忙改下代码,或者解释下原因也行,谢了~

慕运维8079593
浏览 200回答 2
2回答

尚方宝剑之说

我感觉你这句有问题nbytes = ap_get_client_block(r, cbuf, sizeof(cbuf)),你没有读的时候sizeof(cbuf)是空,就读不到数据,我是这样写的,nbytes = ap_get_client_block(r, cbuf, HUGE_STRING_LEN),这样就可以读到post数据了

万千封印

问题在于使用了ap_get_client_block函数,如果你想获取POST参数同时不影响网站的正常运行,应该用一个input filter,同时放弃ap_get_client_block这个函数,靠自己手写来从brigade和buck中读取数据。我试过,自己手写之后是可以运行的
随时随地看视频慕课网APP
我要回答