嵌入式Linux web配置示例

这篇博客详细介绍了在嵌入式Linux系统中进行Web配置的实际操作,包括使用index.html作为首页,集成common.js脚本,以及针对libini源码进行图片管理和格式转换,将图片后缀更改为rar。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

嵌入式web配置示例

index.html

<html>
<head>
<!--<meta http-equiv="Content-Type" content="text/html; charset=gb2312">-->
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<title>嵌入式网页配置示例</title>

<script type="text/javascript">
function validate_passwd(field,alerttxt)
{
	with (field)
	{
		apos=value.indexOf("@")
		dotpos=value.lastIndexOf(".")
		if (value != '123')
		{
			alert(alerttxt);
			return false
		}
		else 
		{
			return true
		}
	}
}

function validate_form(thisform)
{
	with (thisform)
	{
		if (validate_passwd(passwd,"密码错误!")==false)
		{
			passwd.focus();
			return false
		}
	}
}
</script>

<body>

<pre>
<center>
<h1>嵌入式网页配置示例</h1>
<form action="./cgi-bin/read.cgi" onsubmit="return validate_form(this);" method="post">
请输入密码:<input type="password" name="passwd" > <input type="submit" value="提交"> 
</form>
</center>
</pre>

</body>
</html>

read.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "libini.h"

char local_mac[32] = "00:01:02:03:04:05";
char local_ip[32] = "0.0.0.0";
char yealink_report_server[32] = "0.0.0.0";
char server_ip[32] = "0.0.0.0";
char number[32] = "0000";
char password[32] = "0000";

void read_rclocal(void)
{
	FILE *fp;

	// fp = fopen("./cgi-bin/rc.local", "rt");
	fp = fopen("/home/bin/rc.local", "rt");
	if (fp != NULL)
	{
		char buffer[256];

		memset(buffer, 0, sizeof(buffer));
		fread(buffer, 1, sizeof(buffer), fp);
		//printf("buffer = %s\n", buffer);

		{	// 读mac地址
			char *p;
			char *p2;

			p = strtok(buffer, "\n");
			//printf("p = %s\n", p);
			p = strtok(NULL, "\n");
			//printf("p = %s\n", p);
			// mac地址行
			p2 = strtok(p, " ");
			//printf("p2 = %s\n", p2);
			p2 = strtok(NULL, " ");
			//printf("p2 = %s\n", p2);
			p2 = strtok(NULL, " ");
			//printf("p2 = %s\n", p2);
			p2 = strtok(NULL, " ");
			//printf("p2 = %s\n", p2);
			p2 = strtok(NULL, "\n");
			//printf("p2 = %s\n", p2);

			if (p2 != NULL && local_mac != NULL)
			{
				memset(local_mac, 0, sizeof(local_mac));
				strcpy(local_mac, p2);
				//printf("local_mac = %s\n", local_mac);
			}
		}

		{	// 读local_ip
			char *p;
			char *p2;
			memset(buffer, 0, sizeof(buffer));
			fseek(fp, 0, SEEK_SET);
			fread(buffer, 1, sizeof(buffer), fp);
			//printf("buffer = %s\n", buffer);
			p = strtok(buffer, "\n");
			//printf("p = %s\n", p);
			p = strtok(NULL, "\n");
			//printf("p = %s\n", p);
			p = strtok(NULL, "\n");
			//printf("p = %s\n", p);
			p2 = strtok(p, " ");
			//printf("p2 = %s\n", p2);
			p2 = strtok(NULL, " ");
			//printf("p2 = %s\n", p2);
			p2 = strtok(NULL, " ");
			//printf("p2 = %s\n", p2);

			if (p2 != NULL && local_ip != NULL)
			{
				memset(local_ip, 0, sizeof(local_ip));
				strcpy(local_ip, p2);
				//printf("local_ip = %s\n", local_ip);
			}
		}

		fclose(fp);
		fp = NULL;
	}
}

void read_ini(void)
{
	INI *pini;
	pini = ini_open("/home/bin/sdp_config.ini");
	if (!pini) 
	{
		printf("load config faild.\n");
		return;
	}
	
	//printf("length:%d\n", pini->length);

	ini_set(pini, "system@local_ip", local_ip);
	//printf("local_ip = %s\n", local_ip);

	ini_get(pini, "system@yealink_report_server", yealink_report_server);
	//printf("yealink_report_server = %s\n", yealink_report_server);

	ini_get(pini, "phone@server_ip", server_ip);
	//printf("server_ip = %s\n", server_ip);

	ini_get(pini, "phone@number", number);
	//printf("number = %s\n", number);

	ini_get(pini, "phone@password", password);
	//printf("password = %s\n", password);

	ini_save(pini);
	ini_close(pini);
}

void web_page(void)
{
	// html page.
	// printf("Content-type:text/html;charset=gb2312\n\n");
	printf("Content-type:text/html;charset=utf8\n\n");
	printf("<html>"); 
	printf("<head>");
	printf("<title>配置页面</title>");
	printf("<script src='../common.js'></script>");
	printf("</head>");
	printf("<body>");

	printf("<p><pre><center>");
	printf("<h1>配置界面</h1>");
	printf("\n");
	printf("<form action='write.cgi' onsubmit='return validate_form(this);' method='post'>");

	printf("本 机MAC:<input type='text' id='local_mac' name='local_mac' value='%s' />", local_mac);
	printf("\n\n");
	printf("本 机 IP:<input type='text' id='local_ip' name='local_ip' value='%s' />", local_ip);
	printf("\n\n");
	printf("调度台IP:<input type='text' id='yealink_report_server' name='yealink_report_server' value='%s'/>", yealink_report_server);
	printf("\n\n");
	printf("服务器IP:<input type='text' id='server_ip' name='server_ip' value='%s' />", server_ip);
	printf("\n\n");
	printf("电话号码:<input type='text' id='number' name='number' value='%s' />", number);
	printf("\n\n");
	printf("密    码:<input type='text' id='password' name='password' value='%s' />", password);
	printf("\n\n");
	printf("<input type='submit' value='提交' />     <input type='button', value='退出' onclick=window.location.href='../index.html' />");
	printf("\n");

	printf("</form>");
	printf("</center></pre></p>");

	printf("</body>");
	printf("</html>");
}

int main(int argc, char *argv[])
{
	read_rclocal();
	read_ini();
	web_page();

	return 0;
}

write.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "libini.h"

char local_mac[32] = "00:01:02:03:04:05";
char local_ip[32] = "0.0.0.0";
char yealink_report_server[32] = "0.0.0.0";
char server_ip[32] = "0.0.0.0";
char number[32] = "0000";
char password[32] = "0000";
char buf[256];

void write_rclocal(void)
{
	FILE *fp;

	// fp = fopen("./cgi-bin/rc.local", "rt");
	fp = fopen("/home/bin/rc.local", "wt");
	if (fp != NULL)
	{
		char buffer[256];
		memset(buffer, 0, sizeof(buffer));
		sprintf(buffer, "#!/bin/sh\nifconfig eth0 hw ether %s\nifconfig eth0 %s up\nifconfig lo 127.0.0.1 up\nhostname %s\n",
			local_mac, local_ip, local_ip);
		fwrite(buffer, 1, strlen(buffer), fp);
		fclose(fp);
		fp = NULL;
	}
}

// URL解密
void urldecode(char *p)
{
	register i=0;

	if (p != NULL)
	{
		while(*(p+i))
		{
			if ((*p=*(p+i)) == '%')
			{
				*p = *(p+i+1) >= 'A' ? ((*(p+i+1) & 0XDF) - 'A') + 10 : (*(p+i+1) - '0');
				*p = (*p) * 16;
				*p += *(p+i+2) >= 'A' ? ((*(p+i+2)&0XDF) - 'A') + 10 : (*(p+i+2) - '0');
				i+=2;
			}
			else if (*(p+i)=='+')
			{
				*p=' ';
			}
			p++;
		}

		*p='\0';
	}	
}

void read_form(void)
{
	int		len;
	char	*data;
	char	*method;	

	method = getenv("REQUEST_METHOD");
	if(method == NULL)
	{
		return;
	}

	if(!strcmp(method, "POST"))
	{
		len = atoi(getenv("CONTENT_LENGTH"));
		if(len != 0)
		{
			data = (char *)malloc(sizeof(char)*len + 1);
			memset(data, 0, (sizeof(char)*len + 1));
			fread(data, sizeof(char), len, stdin);
		}
	}
	else if(!strcmp(method, "GET"))
	{
		data = getenv("QUERY_STRING");
		len = strlen(data);
	}
	
	if(len != 0)
	{	
		urldecode(data);
		memset(buf, 0, sizeof(buf));
		strcpy(buf, data);
	}	
}

void analyse(void)
{
	// 分解信息
	char *p;

	p = strtok(buf, "&=");
	//printf("p = %s\n", p);
	p = strtok(NULL, "&=");
	//printf("p = %s\n", p);
	if (p != NULL && local_mac != NULL)
	{
		memset(local_mac, 0, sizeof(local_mac));
		strcpy(local_mac, p);
		//printf("local_mac = %s\n", local_mac);
	}
	p = strtok(NULL, "&=");
	//printf("p = %s\n", p);
	p = strtok(NULL, "&=");
	//printf("p = %s\n", p);
	if (p != NULL && local_ip != NULL)
	{
		memset(local_ip, 0, sizeof(local_ip));
		strcpy(local_ip, p);
		//printf("local_ip = %s\n", local_ip);
	}
	p = strtok(NULL, "&=");
	//printf("p = %s\n", p);
	p = strtok(NULL, "&=");
	//printf("p = %s\n", p);
	if (p != NULL && yealink_report_server != NULL)
	{
		memset(yealink_report_server, 0, sizeof(yealink_report_server));
		strcpy(yealink_report_server, p);
		//printf("yealink_report_server = %s\n", yealink_report_server);
	}
	p = strtok(NULL, "&=");
	//printf("p = %s\n", p);
	p = strtok(NULL, "&=");
	//printf("p = %s\n", p);
	if (p != NULL && server_ip != NULL)
	{
		memset(server_ip, 0, sizeof(server_ip));
		strcpy(server_ip, p);
		//printf("server_ip = %s\n", server_ip);
	}
	p = strtok(NULL, "&=");
	//printf("p = %s\n", p);
	p = strtok(NULL, "&=");
	//printf("p = %s\n", p);
	if (p != NULL && number != NULL)
	{
		memset(number, 0, sizeof(number));
		strcpy(number, p);
		//printf("number = %s\n", number);
	}
	p = strtok(NULL, "&=");
	//printf("p = %s\n", p);
	p = strtok(NULL, "&=");
	//printf("p = %s\n", p);
	if (p != NULL && password != NULL)
	{
		memset(password, 0, sizeof(password));
		strcpy(password, p);
		//printf("number = %s\n", password);
	}

}

void write_ini(void)
{
	INI *pini;
	pini = ini_open("/home/bin/sdp_config.ini");
	if (!pini) 
	{
		printf("load config faild.\n");
		return;
	}
	
	//printf("length:%d\n", pini->length);

	ini_set(pini, "system@local_ip", local_ip);
	//printf("local_ip = %s\n", local_ip);

	ini_set(pini, "system@yealink_report_server", yealink_report_server);
	//printf("yealink_report_server = %s\n", yealink_report_server);

	ini_set(pini, "phone@server_ip", server_ip);
	//printf("server_ip = %s\n", server_ip);

	ini_set(pini, "phone@number", number);
	//printf("number = %s\n", number);

	ini_set(pini, "phone@password", password);
	//printf("password = %s\n", password);

	ini_save(pini);
	ini_close(pini);
}

void web_page(void)
{
	// html page.
	// printf("Content-type:text/html;charset=gb2312\n\n");
	printf("Content-type:text/html;charset=utf8\n\n");
	printf("<html>"); 
	printf("<head>");
	printf("<title>重新启动</title>");
	printf("<meta http-equiv='Refresh' content='40;URL=http://%s:8080' />", local_ip);
	printf("</head>");

	printf("<body>");
	// printf("<p>%s</p>", buf);
	printf("<p>重新启动中 ... ... </p>");
	printf("</body>");

	printf("</html>");
}



void reboot_arm(void)
{
	fflush(stdout);
	system("sync");
	system("sync");
	system("reboot");
}

int main(int argc, char *argv[])
{
	read_form();
	analyse();
	write_rclocal();
	write_ini();
	web_page();
	reboot_arm();
	
	return 0;
}

common.js

function validate_mac(field,alerttxt)
{
	with (field)
	{
		//mac地址正则表达式 
		var reg_name=/[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}/; 

		if(!reg_name.test(value))
		{
			alert(alerttxt);
			return false;
		}
		else
		{
			return true;
		}		
	}
}

function validate_ip(field,alerttxt)
{
	with (field)
	{
		//ip地址正则表达式 
		var reg_name=/^(([01]?[\d]{1,2})|(2[0-4][\d])|(25[0-5]))(\.(([01]?[\d]{1,2})|(2[0-4][\d])|(25[0-5]))){3}$/; 

		if(!reg_name.test(value))
		{
			alert(alerttxt);
			return false;
		}
		else
		{
			return true;
		}		
	}
}

function validate_number(field,alerttxt)
{
	with (field)
	{
		//mac地址正则表达式 
		var reg_name=/^[0-9]*$/; 

		if(!reg_name.test(value))
		{
			alert(alerttxt);
			return false;
		}
		else
		{
			return true;
		}		
	}
}

function validate_form(thisform)
{
	with (thisform)
	{
		if (validate_mac(local_mac,"Not a valid mac address!")==false)
		{
			local_mac.focus();
			return false
		}
		else if (validate_ip(local_ip,"Not a valid ip address!")==false)
		{
			local_ip.focus();
			return false
		}
		else if (validate_ip(yealink_report_server,"Not a valid ip address!")==false)
		{
			yealink_report_server.focus();
			return false
		}
		else if (validate_ip(server_ip,"Not a valid ip address!")==false)
		{
			server_ip.focus();
			return false
		}
		else if (validate_number(number,"Not a valid number!")==false)
		{
			number.focus();
			return false
		}
		else if (validate_number(password,"Not a valid password!")==false)
		{
			password.focus();
			return false
		}
	}
}

libini源码:保存图片,将图片后缀改为rar



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值