While i will always provide my software for free, donations are extremely helpful for allowing me to continue making these apps, so any donation would be appreciated:
- Please note - this app is still in an alpha stage of development as a product. It has been built for production on a single site and has been working without issue, however please consider this an in-development product for now. Please do try it, report issues and request features, but consider it unsuitable for a production environment until any bugs have been ironed out.
ExamSubs is a lightweight PHP/MySQL web portal for managing exam submissions for an education institution. Students can upload required files through a simple form, while staff can define exams, including what files and file types are expected to be submitted, collect submissions, and review uploaded materials from a dedicated dashboard. The system keeps uploads organised by exam and submission to make retrieval and auditing straightforward.
Instructions for staff/student usage are available in STAFF_INSTRUCTIONS.md and STUDENT_INSTRUCTIONS.md.
- Create a MySQL database (default name
exam_portal). - Import the schema.sql file included in this repo into the database.
- Put your mySQL database credentials in
config.php. - Ensure the web server user can write to
uploads/. - Visit:
- Student view:
/index.php - Staff view:
/staff/index.php
- Student view:
- File uploads are stored under
uploads/exam_{id}/submission_{id}, though are of course downloadable from the Administration Portal. - Configure PHP upload limits (
upload_max_filesize,post_max_size) if needed to increase maximum file size that can be uploaded.
This app is setup to use Microsoft Entra authentication to access the Exam Administration (Staff) section. You will need to create an 'App Registration' within the Microsoft Entra portal.
- Single-tenant
- Web platform
- Redirect URI will be set to your site URL +
/auth/callback.php) e.g. https://your-domain.example.com/auth/callback.php
openid, profile, email
Using the 'Enterprise Applications' section of Microsoft Entra, i highly recommend you restrict usage of this application to only trusted staff members by enabling the 'Assignment required?' option in the Properties of the app in Entra, and then using the 'Users and Groups' tab to assign trusted users.
tenant_id- Your Microsoft Tenant IDclient_id- Your Application (Client) ID in your registered app on Entraclient_secret- The Client Secret you setup in the API Permissions of the App on Entraredirect_uri(set to your site URL +/auth/callback.php) e.g. https://your-domain.example.com/auth/callback.php

