PHP 其实也能写在线评测系统:HUSTOJ 从安装到使用小白式讲解

前言

提到在线评测系统(Online Judge),很多人会想到用C++、Java 或 Python 等语言开发。但你可能不知道,​PHP 同样能够构建功能强大的在线评测系统​!今天我们就来聊聊基于 PHP 的 HUSTOJ ——一个成熟稳定的开源在线评测系统

*雨云论坛竟然不支持 latex*

HUSTOJ

hustoj 由 华中科技大学(实际上只有 zhblue 一个人和喜欢 pr 的网友) 开发,前后端完全使用 php 开发,判题机是 docker ,不用担心安全问题,这点为 oi 教学系统提供了很好的解决方案

主要优势:

  • 开源免费
  • 允许商用(只需要开放源代码)
  • 海量题库(约 5000 道题目可以下载)
  • 支持多种语言提交
  • 社区活跃
  • 易于二开(直接修改文件即可,不需要重新 build)

HUSTOJ 相关资料

QQ 群:23361372
wiki:代码的那些事 | 程序员回忆录
github:zhblue/hustoj: Popular Simple Open Source Online Judge based on PHP/C++/MySQL/Linux for ACM/ICPC and NOIP training, with easy installation. 简单实用的开源OJ系统
题库:TK题库

正文

我们如何部署如此强势的 online judge 呢?
我们可以使用同样强势的的 雨云宝塔面板
温馨提示:1-1 也可以部署 hustoj
购买完服务器后,需要安装宝塔面板
操作系统选择 ubuntu 22.04

开始部署

创建数据库

登录上你的 宝塔面板,左侧数据库,创建数据库,数据库名称 jol ,进行创建

运行安装脚本

先登录上你的 宝塔面板 ,进入左侧终端,执行两条命令

wget http://dl.hustoj.com/install-ubuntu22.04-bt.sh # 拉取安装脚本
bash install-ubuntu22.04-bt.sh # 运行安装脚本

这时,他会要求你输入数据库用户名和密码,请依次键入你创建数据库的时候的用户名和密码

image

随后便开始安装了…

期间可能会多次需要你按下 enter 键

请不要使用 Windows + V 剪切板功能
请保持 bt 窗口活跃
安装速度结合网络宽带而定

需要按 enter 大杂烩:

创建站点并配置

宝塔左边网站,php,创建网站,域名http://<server_ip>:<port>,根目录/home/judge/src/web

然后设置这个,左边网站目录,关闭放跨站攻击

然后,左边软件商店,搜索 php ,设置安装的 php,左边禁用函数,取消 putenv 函数的禁用

然后,使用浏览器访问你的 oj ,恭喜你,访问成功!

简单使用 HUSTOJ

注册管理员账户

右上角注册,用户名一定要写admin,其他随意,注册即可

添加一道题目

后台管理 URL 是 http://<server_ip>:<port>/admin/

左侧【问题-管理】【问题-添加】

<span class='md'>
</span>

这是 markdown 的标记,题面需要在里面写,支持 latex、katex

添加即可

维护

系统配置

/home/judge/src/web/include/db_info.inc.php 有注释

其他你可能需要知道的东西

/home/judge/src/web 是站点文件


感谢阅读

1 个赞

本人是 hustoj 的二次开发人,首先就是 hustoj 的二次开发是
目前来讲所有 OJ 里面最简单的(判题机除外)
因为 hustoj 前端是基于 php 的,而众所周知,php 是世界上最好的语言(划掉)
如果你希望对 hustoj 进行二次开发,我给你一些指南,都是本人亲手摸索出来的。

SQL 调用

sql 这一部分你不需要担心,hustoj 帮你写好了。
每个页面里的 COMMON HEAD 带的有 pdo_query 这个函数,用法如下:

pdo_query($sql, $arg, $arg, $arg...)

比如

pdo_query("select * from users where user_id = ?", "admin")

是用来查 users 表里面 admin 那一行数据的。
以及提醒你们:
不要乱动 solution\users 表
这两个表都是有外部修改的,solution 表有判题机,users 表有注册和登录,除非你可以让你对这两个表的修改不影响到其他程序,否则不要修改。

Template 系统

首先,将东西最少的页面,view_news.php 这个页面的东西 copy 过来,然后删掉 common head 后面的东西(不是common head的起始部分)文件就新建好了,然后在你用的主题里面也创建一个同名文件,把你 copy 过来的内容里写上 require ‘./template/’.$OJ_TEMPLATE.‘/<你文件名字>.php’ 即可。
hustoj 前端的模板系统只是徒有其名哦。

我个人也是整这个的,这些东西我都动过,也没啥问题