我在寫一個簡單的http服務器,並且我想使用php-cgi
來處理POST
請求。我寫的handlePOST
如下:Http服務器使用C++將數據發佈到php-cgi
void KServer::handlePOST(int sockfd, string file, string pdata){
char* argvs[MAX_PARAMS];
argvs[0] = const_cast<char*>(CGI_PATH);
argvs[1] = const_cast<char*>(file.c_str());
stringstream ss;
ss<<pdata.length();
string clen, sname;
ss>>clen;
clen = "CONTENT_LENGTH=" + clen;
sname = "SCRIPT_FILENAME="+file;
char* env[] = {
"REQUEST_METHOD=POST",
"REDIRECT_STATUS=CGI",
const_cast<char*>(clen.c_str()),
const_cast<char*>(sname.c_str()),
"CONTENT_TYPE=application/x-www-form-urlencoded",
0
};
istringstream stream(pdata);
cin.rdbuf(stream.rdbuf());
execve(argvs[0], argvs, env);
...
我知道php-cgi
從STDIN
得到POST
數據。我把POST
數據(變種pdata
)放入cin.rdbuf
。但是,執行execve時,程序無法從STDIN
獲取數據。但如果我使用控制檯輸入字符串,程序可以正常運行。