标题:apache, mod_cgi
出处:Felix021
时间:Thu, 07 Jan 2010 20:40:58 +0000
作者:felix021
地址:https://www.felix021.com/blog/read.php?1810
内容:
编译apache的时候默认应该是有mod_cgi的,如果不确定,可以加上--enable_cgi。
在httpd.conf里面增加(或修改,因为可能已经有这个东西了):引用
ScriptAlias /cgi-bin/ /某路径/cgi-bin/
如果你修改了“某路径”,那么后面对应的Directory一节也应该对应修改引用
AllowOverride None
Options FollowSymLinks #如果不放心,这里还可以加上一个ExecCgi选项。
Order allow,deny
Allow from all
下面是一个简单的C编写的cgi程序,gcc -o printall simple_cgi.c,把printall放在cgi-bin目录下面。然后访问:http://localhost/cgi-bin/printall,可以看到输出。特别注意一下,cgi不仅要打HTTP实体,还要打HTTP头信息。如果你实在懒得写,在实体前面加上一个回车就行了:) 否则你会看到apache的error_log里输出诸如"malformed header from script. Bad header="这样的错误信息。
#include
#include
extern char ** environ;
int main ()
{
int i;
puts("Content-Type: text/plain\n\n");
for (i = 0; environ[i] != NULL; i++) {
printf ("%s\n", environ[i]);
}
if (strncmp("POST", getenv("REQUEST_METHOD"), 4) == 0) {
char buf[1025];
while (1) {
fgets(buf, 1024, stdin);
printf( "%s", buf);
if (feof(stdin)) {
break;
}
}
}
return 0;
}
特别点出一下,GET请求的query_string是在environ["QUERY_STRING"]里面,而POST请求的输入,是从stdin中读取。
Generated by Bo-blog 2.1.0