# autocheck **Repository Path**: tonyddg/autocheck ## Basic Information - **Project Name**: autocheck - **Description**: Autocheck是一个简易的基于Linux的OnlineJudge系统,可以实时编译用户上传的代码进行编译并检测结果。 - **Primary Language**: PHP - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-01-31 - **Last Updated**: 2022-02-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AutoCheck ## 介绍 Autocheck是一个简易的基于Linux的OnlineJudge系统,可以实时编译用户上传的代码进行编译并检测结果。 ## 源文件 ./autocheck 网页文件 ./src_cpp C++部分源文件 ./src_sql mysql数据库的备份 ## 原理 用户访问projinter.html?pid=[题目编号]-> GenerPage.js获取pid并发送请求至ProjInf.php获取题目信息并渲染页面 用户输入程序并提交-> SubmitAnd.js获取用户输入并发送请求至FileCompile.php-> FileCompile.php编译用户的源代码保存在./autocheck/testenv/[时间]_[随机值]中 并运行autocheck-> autocheck以json输出结果并由FileCompile.php获取并发送回用户端-> SubmitAnd.js通过获取的json渲染结果页面 FileCompile.php对于错误的处理: 当发生非用户造成的错误时,FileCompile.php将会把发生错误的临时环境剪切到./autocheck/errorlog中,管理员可通过查看该文件夹了解错误情况 ## 主要部分功能 ### autocheck 执行测试并检测程序的运行消耗与结果验证 执行部分采用fork与wait4函数实现检测相关数据 参数 [测试项目名] [测试名称] [测试点数目] [时间限制单位秒,0为无限制] [内存限制单位kb,0为无限制] 当发生严重错误时输出错误码与#,成功时输出* ### FileCompile.php 获取用户端的数据,编译程序并执行测试 ### ProjInf.php 连接mysql获取题目的详细信息 ## 数据库字段说明 数据库名称: autocheck 表名: proj_list 字段 pid 项目id proj_name 项目名称(内部名称) proj_intro 项目介绍 proj_point 项目测试点数目 proj_title 项目标题 memory_limit 项目的内存限制,大小kb time_limit 项目的时间限制,大小ms ## 部署 确保电脑/服务器上安装php7.0以上,mysql5.0以上,g++,cmake,g++ 1. ./src_sql中的autocheck.sql导入 ``` #mysql指令 CREATE DATABASE autocheck; USE autocheck; SOURCE [src_sql的路径]/autocheck.sql; ``` 2. 使用cmake编译./src_cpp(生成结果在./autocheck中) ``` #bash指令 cd [src_cpp的路径]/build cmake .. make ``` 3. 在serve_env.php填写正确的登入信息 4. 通过访问projinter.html?pid=1/2/3这三个默认的题目进行测试 5. 新建题目需要在mysql中插入有关信息并在./autocheck/projlist中建立项目名文件夹,放入输入输出文件[项目名][序号].in/out,其中序号为0的作为样例。 如果部署在服务器上还需要注意 1. 向server_env.php中的WORKROOT填入网页根目录的绝对路径 (一般为/var/www/html) 2. 至少修改./autocheck/testenv ./autocheck/errorlog ./autocheck/projlist 的权限使php可读写 (chmod -R 777 [路径]) 3. 确保服务端开启并安装扩展mysqli与json (sudo apt install php-mysql) (sudo apt install php-json) (修改php.ini) 4. 确保服务端的php有权限执行exec() (非ubuntu用户需要特别注意) 5. 确保mysql使用utf8字符集 6. 确保mysql可以正常连接 (新安装的mysql需要为root设置初始密码) ## 其他说明 1. 错误码: 见./errorcode.md 2. 仅./autocheck内的文件需要部署在网页根目录,其他文件不用