2010年は Tokyo Promenade を使うことにしました。今年もよろしくお願いします。
8-p.info では、なんとなく lighttpd を使っています。lighttpd + TP だと
- lighttpd は GET から CGI を起動するにも環境変数 CONTENT_LENGTH に "0" をセットする
- TP は環境変数 CONTENT_LENGTH があると QUERY_STRING はみない
という二つがあわさって、結果「クエリパラメータが GET で渡せない」という悲しいことになったので、TP 側に回避するコードをいれました。
diff -r cb9efd6d3dd5 promenade.c
--- a/promenade.c Thu Dec 03 01:36:18 2009 +0900
+++ b/promenade.c Wed Dec 23 17:11:07 2009 +0900
@@ -329,9 +329,12 @@
TCMAP *params = tcmpoolpushmap(mpool, tcmapnew2(TINYBNUM));
double now = tctime();
// read query parameters
- rp = getenv("CONTENT_LENGTH");
+ const char *method = getenv("REQUEST_METHOD");
bool post = false;
- if(rp){
+ if(method && !strcmp(method, "GET")){
+ const char *query = getenv("QUERY_STRING");
+ if(query) tcwwwformdecode(query, params);
+ } else if((rp = getenv("CONTENT_LENGTH"))){
int clen = tcatoi(rp);
if(clen > g_recvmax){
showerror(413, "The entity body was too long.");
@@ -344,9 +347,6 @@
}
tcwwwformdecode2(cbuf, clen, getenv("CONTENT_TYPE"), params);
post = true;
- } else {
- const char *query = getenv("QUERY_STRING");
- if(query) tcwwwformdecode(query, params);
}
rp = getenv("HTTP_COOKIE");
if(rp) tcwwwformdecode(rp, params);