news 2026/8/22 11:52:01

TCExam实战:从零跑起来到上线的开源在线考试系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TCExam实战:从零跑起来到上线的开源在线考试系统

TCExam实战:从零跑起来到上线的开源在线考试系统

【免费下载链接】tcexamTCExam is a CBA (Computer-Based Assessment) system (e-exam, CBT - Computer Based Testing) for universities, schools and companies, that enables educators and trainers to author, schedule, deliver, and report on surveys, quizzes, tests and exams.项目地址: https://gitcode.com/gh_mirrors/tc/tcexam

TCExam 是一款开源的计算机化评估(CBA)系统,面向高校、学校和企业,覆盖出题、排期、施考、成绩报告全流程。它的定位很明确:把纸质考卷和临时拼凑的表格,换成一个浏览器里就能跑、客观题自动批改的考试服务。

谁适合用它,谁可以先绕开

适合你的场景建议先绕开的场景
客观题占比高:单选、多选、判断、填空、简答评分规则可预设纯主观论述、需要教师逐份人工批阅的卷
学校、培训机构、企业内部定期考核与认证考试需要原生 App 或小程序深度集成的产品形态
要自动评分、批量导入考生、导出成绩做统计团队里没人能维护一台 PHP 服务器

架构上它把三个部分拆在独立目录:管理员后台在admin/,考生前端在public/,公共代码在shared/。后台、前台各自有独立的 Web 入口,部署时按目录分别控制访问,这一点直接影响你后面的权限配置。

三条部署路径,容器优先

环境要求(精确版本)

  • PHP 8.2 及以上(官方在 8.2 / 8.3 / 8.4 上测试),需扩展:mysqlipgsqlgdintlbcmathmbstringzipcurlxmlopensslposix;用 Oracle 另需oci8
  • 数据库:MySQL/MariaDB、PostgreSQL 或 Oracle 三选一
  • Web 服务器:推荐 Apache + mod_php(项目自带.htaccess访问控制规则,其他服务器要手动复现)
  • Composer 必装——PDF 引擎、邮件库、CAS 库都靠它拉取,不装起不来
  • 可选能力:公式渲染要 LaTeX + ImageMagick;OMR 扫描卷导入要zbarimg

路径一:容器(试用、验证功能)

git clone https://gitcode.com/gh_mirrors/tc/tcexam cd tcexam docker compose up --build

起来后直接打开http://localhost:8080/。入口脚本会用docker-compose.yml里的数据库配置(内置 MariaDB 11)自动跑一遍非交互安装,不需要浏览器向导;配置挂在命名卷里,downup实例还在。默认账号admin/1234,首次登录就改掉。

路径二:裸机或云服务器(正式部署)

composer install make lang

第一条是启动硬前提(顺带生成 PDF 字体),第二条预生成翻译缓存,省得首用临时构建。然后三步:

  • 把 Web 站点根目录指向项目目录
  • cache/admin/backup/以及admin/config/public/config/shared/config/的父目录可被 Web 用户写入(安装器要往里写配置文件)
  • 打开http://your-domain/install/install.php,填数据库类型、主机、端口、用户名和密码(密码不能为空),按向导完成

路径三:本地开发

走路径二的前两步,数据库用本地已有的 MySQL 或 PostgreSQL,向导里 db host 填localhost即可。装完后把站点目录换成本地 PHP 8.2+ 的 docroot,行为与生产一致。

高频功能走查:从建题到出成绩

建题库与组卷

入口在后台(/admin/code/登录)的"问题"和"考试"两个菜单。先在题目编辑里按科目分组建题,设题型、答案和分值;再到考试编辑里建考试、抽题、设时限和访问权限。得到一份可发布的考试,考生从 public 侧入口作答。

考生名单与分组

入口是后台"用户"菜单。用 CSV 导入一次性灌入名单,再用分组管理把考生归类。得到按组划分的考生池,后面给考试分配权限按组来,不用逐个勾人。

施考与实时监控

入口两处:考生在public/code/tce_test_execute.php页面作答;考试进行中管理员打开 在线用户。得到一份实时在线清单,谁在考、剩余多少时间一目了然,异常断线能立刻发现。

评分、报告与导出

客观题交卷即自动评分,不用人工过一遍。考生在public/code/tce_test_results.php查个人成绩;管理员侧用 PDF 报告 出正式成绩单,用 XML 导出 拿结构化数据灌进教务系统。得到的是可直接归档和二次加工的结果。

备份

入口是后台的备份模块。题目、考试、用户数据可整体备份,恢复时原路导回。

进阶配置:SMTP、单点登录与报告

邮件通知

成绩邮件走 SMTP。把shared/config.default/tce_email_config.php拷到shared/config/后改这几项,其余保持默认:

$emailcfg['Mailer'] = 'smtp'; $emailcfg['Host'] = 'smtp.your-email.com'; $emailcfg['Port'] = 465; $emailcfg['SMTPAuth'] = true; $emailcfg['SMTPSecure'] = 'ssl';

补上Username/Password即可,之后在后台"Email results"页按考生发成绩邮件。

单点登录

单位有 CAS 的话,改 tce_cas.php:把K_CAS_ENABLED设为true,填服务端地址。验证通过的用户会自动复制进 TCExam 数据库。LDAP 走同目录下的tce_ldap.php,思路相同。

PDF 报告与公式

PDF 引擎由composer install拉取,字体自动就位;换字体后跑一次make fonts重新生成。题目里带 LaTeX 公式的话,服务器上装好 LaTeX 和 ImageMagick,在shared/config/tce_latex.php里对齐可执行文件路径,细节看 doc/LATEX.md。

排障手记:四个高频故障

现象排查处置
部署后起不来、提示类不存在多半没跑composer install执行该命令,确认vendor/目录生成
安装向导连不上数据库凭据、端口、防火墙逐项核对确认用户名密码正确(密码非空)、用户有建库建表权限,安装器自己建表
题目里的公式显示成源码LaTeX / ImageMagick 没装或路径不对装好两个组件,对照tce_latex.php里的路径和实际二进制位置
考试高峰页面慢PHP 内存和缓存调高memory_limit,启用 opcache,再查数据库连接

上线清单

  1. 整个install/目录删掉——生产环境向导不能可访问
  2. 删掉默认admin/1234账号,新建一个 level-10 管理员
  3. 权限收口:文件 644、目录 755;cache/admin/backup/保留给 Web 用户可写
  4. 备份双保险:后台"Backup"定期导出 + 数据库mysqldump定时任务,留一份异地副本
  5. 开启 opcache,按考试规模调memory_limit
  6. 盯官方安全公告,有更新就跟上

收尾

TCExam 的能力边界比较清楚:题库、考试、报告这条主线走通后,它基本是个稳定的托管服务,剩下的维护量集中在 PHP 环境和数据库上。上线前把清单里第 1、2 两条做扎实——删安装目录、换掉默认管理员——这两处是后续安全事件最常见的大本营。

【免费下载链接】tcexamTCExam is a CBA (Computer-Based Assessment) system (e-exam, CBT - Computer Based Testing) for universities, schools and companies, that enables educators and trainers to author, schedule, deliver, and report on surveys, quizzes, tests and exams.项目地址: https://gitcode.com/gh_mirrors/tc/tcexam

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 11:51:08

C++完美转发:右值引用与引用折叠的实战解析

1. 从一次“无效”的拷贝构造说起 最近在重构一个老旧的C消息处理模块时,我遇到了一个典型的性能瓶颈。这个模块的核心是一个 MessageHandler 类,它接收各种类型的消息对象,然后根据类型分发给不同的处理器。最初的实现非常简单粗暴&#x…

作者头像 李华
网站建设 2026/8/22 11:48:52

AI Agent驱动JavaScript代码生成:现代开发工具链的自动化实践

这次我们来看一个名为“code mode 进入现代 harness,工具全由 agent 写 JS”的项目。从标题和网络热词来看,这很可能是一个围绕 DeepSeek Harness 和 AI Agent 开发的前沿工具。它的核心思路是:通过一个“代码模式”(code mod…

作者头像 李华
网站建设 2026/8/22 11:48:32

多智能体辩论如何提升实体对齐的可靠性与可解释性

1. 从“对齐”到“对齐”:实体对齐的挑战与多智能体辩论的引入 在知识图谱构建、数据集成和智能问答等场景中,一个核心且棘手的问题是“实体对齐”。简单来说,就是判断两个不同来源的知识图谱中,比如“苹果”这个词,到…

作者头像 李华
网站建设 2026/8/22 11:48:30

Git命令行提交代码全流程详解:从核心概念到高级实战

1. 项目概述:为什么命令行是Git的“灵魂” 如果你刚开始接触Git,可能会被各种图形化界面(GUI)工具,比如VS Code的源代码管理、GitHub Desktop或者SourceTree所吸引。它们看起来直观,点点鼠标就能完成提交、…

作者头像 李华