# web-demo
**Repository Path**: magic77elva/web-demo
## Basic Information
- **Project Name**: web-demo
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-05-22
- **Last Updated**: 2024-11-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 1、首先安装boa webserver
## 2、查看并指定运行程序及目录
在/etc/boa/boa.conf中声明了cgi的目录,和网页打开的位置
```
boa.conf /etc/boa/boa.conf
cgi-bin/* /usr/lib/cgi-bin/*
index.html /var/www/
xmlhttpreq.js /var/www/
```
## 3、目前使用bootstrap进行网页界面的开发
### 1)界面设计完成,生成html文件,在其中添加我们要响应的接口
```
|
|
|
```
添加js文件响应
```
```
### 2)在js文件中处理我们的界面逻辑
## 4、cgi中处理我们的数据
### 1)目前是给飞凌板子设计的,所以使用飞凌的编译链
```
. /opt/fsl-imx-x11-cortexa7hf/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
make clean;make build
```
### 2)由于cgi文件我们调用的是二进制,调试不方便,所以封装了几个函数,将打印写入文件中查看
```
// 打开日志文件
FILE *open_log_file(const char *filename) {
FILE *log_file = fopen(filename, "a");
if (!log_file) {
perror("Failed to open log file");
exit(EXIT_FAILURE);
}
return log_file;
}
// 写入日志文件
void write_to_log(FILE *log_file, const char *format, ...) {
va_list args;
va_start(args, format);
vfprintf(log_file, format, args);
va_end(args);
}
// 关闭日志文件
void close_log_file(FILE *log_file) {
if (log_file) {
fclose(log_file);
}
}
```
## 5、问题记录
### 1)获取网页上的type值,如何传入的json数据,下位一直出错
```
char *req_method = getenv("REQUEST_METHOD"); //获取GET POST
char *query_string = getenv("QUERY_STRING"); //获取整个包数据,查看前端传下来的完整数据
“/cgi-bin/app.cgi?type=get_current_data&random”
封装了函数专门提取type值
char *get_query_param(const char *query_string, const char *param)
{
if (query_string == NULL || param == NULL)
{
return NULL; // 输入无效
}
char *query_copy = strdup(query_string); // 复制查询字符串以便修改
if (query_copy == NULL)
{
return NULL; // 内存分配失败
}
char *param_value = strtok(query_copy, "&"); // 使用strtok来提取参数
while (param_value != NULL)
{
// 查找参数名
char *equals_sign = strchr(param_value, '=');
if (equals_sign != NULL)
{
*equals_sign = '\0'; // 截断参数名和值
if (strcmp(param_value, param) == 0)
{
// 找到了匹配的参数
*equals_sign = '='; // 恢复等号
return strdup(equals_sign + 1); // 返回参数值
}
}
param_value = strtok(NULL, "&"); // 继续提取下一个参数
}
free(query_copy); // 释放复制的查询字符串
return NULL; // 没有找到匹配的参数
}
```