前言
前面几篇文章我们介绍了如何在自己的服务器上部署moodle在线学习系统和anki同步服务器,而作为moodle与anki的黄金搭档online-exam-system,能有效管理练习与错题,它的错题自动收录和高频错题统计功能能帮助孩子快速定位薄弱环节,进行针对性练习。
接下来,我们将演示如何在自己的服务器上部署online-exam-system。
一、基础环境部署
如果你的服务器上已经部署了moodle在线学习系统,那么你可以直接安装online-exam-system,不需要再安装其它环境。
否则,你可能需要先安装moodle系统,或者单独部署mysql,apache,php等环境。想了解moodle系统的安装配置步骤,可以参考半壶清水的另一篇文章:Moodle + MoodleReader部署方案
https://blog.csdn.net/yangcangong/article/details/155804790?spm=1001.2014.3001.5501
二、安装online-exam-system
1、获取online-exam-system
- 下载地址
online-exam-system可能存在多个版本,我们可以前往github下载合适的版本:
https://github.com/fignetos/online-exam-system-backend

- 上传online-exam-system到你的服务器
将下载的系统包上传到你的服务器,并根据需要命名,上传文件时要注意路径。

2、配置
-
进入文件practice目录,查看内部文件:
cd practice
ls

1)Copy full folder in your web directory. #将文件夹(这里是practice)复制到你的网站目录中。
2)Import database in your phpmyadmin named project.sql. #导入名为project.sql的数据库。
3)Edit dbconnection file.change username,password and database name.Default user is root,password is null and database name is project。 #编辑数据库连接文件。更改用户名、密码和数据库名称。默认用户为 root,密码为空,数据库名称为 project。
Default admin emailid is sunnygkp10@gmail.com and password is 123456 . #默认管理员邮箱为sunnygkp10@gmail.com,密码为123456。

3、安装并启用 mysqli 扩展
-
检查扩展安装情况
docker exec -it lamp-apache bash # 进入正在运行的PHP容器(假设容器名为lamp-apache)
php -m | grep mysqli # 在容器内,检查mysqli扩展是否已安装 , 如果没有输出,说明扩展未安装
php -m # 查看所有已安装的扩展
php --ini # 检查PHP配置文件 -
在你的项目目录下,安装启用 mysqli 扩展。(注意,安装后,如果容器重建后需要重新安装)
sudo docker exec lamp-apache sh -c "docker-php-ext-install mysqli && docker-php-ext-enable mysqli && apachectl graceful"

- 进入容器,检查安装情况,下图表示安装成功。

4、修改 dbConnection.php 文件
sudo vim dbConnection.php
-
文件dbConnection.php中的参考配置如下:
<?php // dbConnection.php $host = 'mysql'; // Docker 服务名,切勿改为 localhost 或 IP $user = 'root'; // 你的 MySQL 用户名 $password = 'mysql中root密码'; // 务必填写真实密码 $database = 'project'; // 你的数据库名// 建立连接
con = new mysqli(host, user, password, $database);// 严格错误检查
if (con->connect_error) { // 不要使用 echo,这会破坏 header 调用。在生产环境中应记录到日志。 // 为调试,我们直接终止并输出错误(login.php使用了header,所以这里更要干净) die('Database connection failed: ' . con->connect_error);
}// 设置字符集
$con->set_charset('utf8mb4');// 注意:此处不要有任何 echo、空格或空行!
?>
5、修改login.php文件
-
文件login.php中的参考配置如下:
<?php session_start(); if(isset($_SESSION["email"])){ session_destroy(); } include_once 'dbConnection.php'; $ref=@$_GET['q']; $email = $_POST['email']; $password = $_POST['password'];email = stripslashes(email);
email = addslashes(email);
password = stripslashes(password);
password = addslashes(password);
password=md5(password);
result = mysqli_query(con,"SELECT email,password FROM admin WHERE email = 'email' and password = 'password'") or die('Error');
count=mysqli_num_rows(result);
if(count==1){ while(row = mysqli_fetch_array(result)) { name = row['name']; } _SESSION["password"] = password; _SESSION["email"] = email; header("location:account.php?q=1"); } else header("location:ref?w=Wrong Username or Password");
?>
6、导入数据库文件project.sql到mysql数据库
- 登录 phpMyAdmin,也许你在部署php时没有部署phpMyAdmin。你也可以使用其它工具(如navicat)等连接数据库后操作

- 登录成功后,先创建一个名称为 project的数据库。

- 选择project.sql文件导入project数据

- 数据库文件导入成功,数据表创建成功。

三、验证
1、登录online-exam-system
-
在浏览器中输入如下地址:
http://192.168.50.108/practice/ #这里根据你实际的IP地址输入。

2、登录管理员账号

点击登录,如果登录成功,说明数据库连接成功。

4、 故障排查方法:
-
我们在部署过程中肯能会遇到各种问题,我们可以创建一个自诊断脚本,来确定问题出在哪个环节,然后按提示解决
-
在你的项目目录下(我这里是practice 目录下) ,创建一个新文件 debug.php,内容如下。
php
<?php // debug.php - 放置在与 login.php 相同的目录 echo "=== 数据库连接诊断报告 ===
";// 1. 检查 dbConnection.php 文件是否存在
dbFile = __DIR__ . '/dbConnection.php'; echo "1. 检查文件路径:'dbFile' ... ";
if (file_exists($dbFile)) {
echo "✓ 文件存在
";
} else {
die("✗ 文件不存在!请检查文件名和路径。");
}// 2. 尝试包含并检查 con 变量 echo "2. 尝试包含 dbConnection.php ... "; include_once dbFile;
if (isset($con)) {
echo "✓ 包含成功,$con 变量已设置。
";
} else {
die("✗ 包含失败或 $con 未定义。dbConnection.php 内部可能有错误。");
}// 3. 检查 con 是否为有效的 mysqli 对象 echo "3. 检查连接对象类型 ... "; if (con instanceof mysqli) {
echo "✓ $con 是 mysqli 对象。
";
} else {
die("✗ $con 不是有效的数据库连接对象。类型:" . gettype($con) . "");
}// 4. 检查数据库连接是否真正可用
echo "4. 检查数据库连接状态 ... ";
if (con->connect_error) { die("✗ 连接失败:" . con->connect_error . "");
} else {
echo "✓ 连接成功!服务器版本:" . $con->server_info . "
";
}// 5. 检查代码中要查询的表和字段是否存在
echo "5. 检查查询表 'admin' 是否存在 ... ";
result = con->query("SHOW TABLES LIKE 'admin'");
if (result && result->num_rows > 0) {
echo "✓ 表 'admin' 存在。
";
} else {
echo "⚠ 警告:数据库中没有名为 'admin' 的表。你的查询将失败。
";
}echo "
诊断完成。请根据上面的红叉(✗)或警告(⚠)信息进行修复。
";// 附上当前连接参数(隐藏部分密码)
echo "连接参数概要:主机=" . con->host_info . ", 数据库=" . (con->select_db('project') ? 'project (OK)' : '未知') . "";
?> -
在浏览器中访问 http://192.168.50.108/practice/debug.php。 以你的实际ip为准
-
仔细阅读页面上第一个出现 红叉(✗) 或 警告(⚠) 的地方,那就是问题所在。下图中显示么有问题。
