cgi路径配置:
在route.txt文件里的route uri=/cgi-bin dir=根路径 handler=cgi
设置根路径,最终的路径为:根路径/cgi-bin,如设置根路径为/mnt/nfs/goheah12/,则cgi文件存放的路径为/mnt/nfs/goheah12/cgi-bin。
网页文件创建,命名为update.html内容如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>用户登陆验证</title>
</head>
<body>
<form name="form1" action="/cgi-bin/main.cgi" method="POST">
<table align="center">
<tr><td align="center" colspan="2"></td></tr>
<tr>
<td align="right">用户名</td>
<td><input type="text" name="Username"></td>
</tr>
<tr>
<td align="right">密 码</td>
<td><input type="password" name="Password"></td>
</tr>
<tr>
<td><input type="submit" value="登 录"></td>
<td><input type="reset" value="取 消"></td>
</tr>
</table>
</form>
</body>
</html>
注:action="/cgi-bin/main.cgi" 这个最终会调用main.cgi
cgi函数构建
mian.c文件,内存如下:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
//printf("Content-type:text/html\n\n"); //这句一定要加上
fprintf(stdout, "Content-Type: text/html\r\n\r\n");
char name[128];
char passward[128];
char buf[128];
char *data;
int len,i,m,n;
char *method;
method = getenv("REQUEST_METHOD");
printf("method = %s\n",method);
memset(name , 0 , sizeof(name));
memset(passward , 0 , sizeof(passward));
fscanf(stdin, "Username=%[^&]&Password=%s",name,passward);
if(name[0] == '\0' || passward[0] == '\0')
printf("name or passward error!");
else
printf("name=%s passward=%s\n",name , passward );
fprintf(stderr, "passward = %s\n",passward);
fprintf(stderr, "name = %s\n",name);
len = atoi(getenv("CONTENT_LENGTH"));
fprintf(stderr, "len = %d\n",len);
fprintf(stdout, "$STATE$=1");
return 0;
}
通过交叉编译,生成main.cgi文件,例如:
arm-himix200-linux-gcc -o main.cgi main.c
cgi文件的拷贝
将main.cgi文件放在cgi的存放路径,上面的cgi路径配置中讲到
网页文件的拷贝
将update.html文件放在目标文件goahead的相同目录上。
测试例子:
在网页上输入:http://10.82.16.61/update.html
点击登录后,网页会回复一下界面:
总结:cgi文件和网页文件的存放路径的设置不一样,要留意。