组保留的标签 余下为需要删除的标签
unset($oldtag[$key]);
}
}
}
if (!empty($oldtag)) {
$tagids = array();
foreach ($oldtag as $tagid => $tagname) {
$tagids[] = $tagid;
}
well_oldtag_delete($tagids, $tid);
}
$r = well_tag_process($tid, $fid, $create_tag, $tagarr);
return $r;
}
// 删除标签和绑定的主题
function well_oldtag_delete($tagids, $tid)
{
$pagesize = count($tagids);
$arrlist = well_tag_find_by_tagids($tagids, 1, $pagesize);
$delete_tagids = array(); // 删除
$tagids = array();
$n = 0;
foreach ($arrlist as $val) {
++$n;
if (1 == $val['count']) {
// 只有一个主题
$delete_tagids[] = $val['tagid'];
} else {
$tagids[] = $val['tagid'];
}
}
!empty($delete_tagids) and well_tag_delete($delete_tagids);
$arlist = well_tag_thread_find_by_tid($tid, 1, $n);
if ($arlist) {
$ids = array();
foreach ($arlist as $val) $ids[] = $val['id'];
well_tag_thread_delete($ids);
}
!empty($tagids) and well_tag_update($tagids, array('count-' => 1));
}
// 标签数据处理 $arr=新提交的数组 $tagarr=保留的旧标签
function well_tag_process($tid, $fid, $new_tags = array(), $tagarr = array())
{
if (empty($tid)) return '';
// 新标签处理入库
if ($new_tags) {
$threadarr = array();
$tagids = array();
$i = 0;
$size = 5;
$n = count($tagarr);
$n = $n > $size ? $size : $size - $n;
foreach ($new_tags as $name) {
++$i;
$name = trim($name);
$name = stripslashes($name);
$name = strip_tags($name);
$name = str_replace(array(' ', '#', "@", "$", "%", "^", '&', '·', '<', '>', ';', '`', '~', '!', '¥', '……', ';', '?', '?', '-', '—', '_', '=', '+', '.', '{', '}', '|', ':', ':', '、', '/', '。', '[', ']', '【', '】', '‘', ' ', ' ', ' ', ' ', ' '), '', $name);
$name = htmlspecialchars($name, ENT_QUOTES);
if ($name && $i <= $n) {
// 查询标签
$read = well_tag_read_name($name);
if ($read) {
// 存在 count+1
$tagids[] = $read['tagid'];
} else {
// 入库
$arr = array('name' => $name, 'count' => 1);
$tagid = well_tag_create($arr);
FALSE === $tagid and message(-1, lang('create_failed'));
$read = array('tagid' => $tagid, 'name' => $name);
}
$tag_thread = array('tagid' => $read['tagid'], 'tid' => $tid);
$threadarr[] = $tag_thread;
$tagarr[$read['tagid']] = $read['name'];
}
}
!empty($threadarr) and tag_thread_big_insert($threadarr);
!empty($tagids) and well_tag_update($tagids, array('count+' => 1));
}
$json = empty($tagarr) ? '' : xn_json_encode($tagarr);
return $json;
}
?> $v = implode(",", $v);
$temp[] = $v;
}
// 去掉重复的字符串,也就是重复的一维数组
$temp = array_unique($temp);
// 再将拆开的数组重新组装
$output = array();
foreach ($temp as $k => $v) {
if ($stkeep) $k = $starr[$k];
if ($ndformat) {
$temparr = explode(",", $v);
foreach ($temparr as $ndkey => $ndval) $output[$k][$ndarr[$ndkey]] = $ndval;
} else $output[$k] = explode(",", $v);
}
return $output;
}
// 合并二维数组 如重复 值以第一个数组值为准
function array2_merge($array1, $array2, $key = '')
{
if (empty($array1) || empty($array2)) return NULL;
$arr = array();
foreach ($array1 as $k => $v) {
isset($v[$key]) ? $arr[$v[$key]] = array_merge($v, $array2[$k]) : $arr[] = array_merge($v, $array2[$k]);
}
return $arr;
}
/*
* 对二维数组排序 两个数组必须有一个相同的键值
* $array1 需要排序数组
* $array2 按照该数组key排序
* */
function array2_sort_key($array1, $array2, $key = '')
{
if (empty($array1) || empty($array2)) return NULL;
$arr = array();
foreach ($array2 as $k => $v) {
if (isset($v[$key]) && $v[$key] == $array1[$v[$key]][$key]) {
$arr[$v[$key]] = $array1[$v[$key]];
} else {
$arr[] = $v;
}
}
return $arr;
}
?>
【免费下载】 FROS 开源路由器系统使用教程编程频道|福州电脑网
【免费下载】 FROS 开源路由器系统使用教程
编程之家790
更新时间:2026-04-03 20:28:58 FROS 开源路由器系统使用教程
1. 项目介绍
FROS(FROS Router System)是一款基于 OpenWrt 开发的企业级路由器系统。它旨在提供强大的路由功能和丰富的应用支持,适用于企业网络管理和家庭网络优化。FROS 支持多种常见的路由器硬件平台,并提供了丰富的插件和功能扩展,如应用过滤、使用时长统计等,特别适合用于儿童网络管理。
2. 项目快速启动
2.1 系统安装
首先,确保你已经安装了 Linux 系统,推荐使用 Ubuntu 18 或更高版本。
2.2 依赖包安装
在终端中运行以下命令,安装必要的依赖包:
sudo apt update -y
sudo apt install -y cmake curl wget vim git antlr3 asciidoc autoconf automake autopoint binutils bison \
build-essential bzip2 ccache cpio device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pyelftools \
libpython3-dev qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip \
xmlto xxd zlib1g-dev ack
2.3 下载源码
使用 Git 克隆 FROS 项目源码:
git clone https://github/openfros/fros.git
2.4 更新 feeds
进入 FROS 项目目录并更新 feeds:
cd fros
./scripts/feeds update -a
./scripts/feeds install -a
2.5 选择编译产品并初始化默认配置
FROS 提供了多种产品的默认配置,你可以通过 build.sh 脚本一键编译特定产品的固件。例如,编译 x86_64 固件:
./build.sh -l x86_64
如果你想手动选择产品和配置,可以通过以下步骤进行:
make menuconfig # 选择产品和其他 package
./build.sh -i # 增加 fros 依赖 package
make V=s # 开始编译
3. 应用案例和最佳实践
3.1 企业网络管理
FROS 可以用于企业网络的管理和优化,提供强大的路由功能和安全策略,帮助企业提升网络性能和安全性。
3.2 家庭网络优化
FROS 支持应用过滤和使用时长统计,特别适合用于家庭网络管理,尤其是儿童网络使用时间的控制。
3.3 开源社区贡献
FROS 是一个开源项目,鼓励社区成员贡献代码和反馈问题,共同推动项目的发展。
4. 典型生态项目
4.1 OpenWrt
FROS 基于 OpenWrt 开发,充分利用了 OpenWrt 的强大功能和丰富的插件生态。
4.2 ImmortalWrt
FROS 支持 ImmortalWrt 固件,提供了更多的功能和优化,适用于高性能路由器。
4.3 GitHub 社区
FROS 项目托管在 GitHub 上,社区成员可以通过 GitHub 参与项目开发、提交问题和贡献代码。
通过以上步骤,你可以快速上手 FROS 开源路由器系统,并根据实际需求进行定制和优化。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
本文发布于:2025-08-06,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:路由器开源教程系统Fros
发布评论