A simple PHP-based server status web app for monitoring and displaying uptime and status of your servers.
-
Clone or Download the Repository
- Place the files on your web server. Subdomains are supported but subfolders are not.
-
Configuration
- Rename
config.example.phptoconfig.php. - Edit
config.phpand set your site name, database credentials, email settings, timezone, and other options as needed.
- Rename
-
Database Setup
- Import the SQL schema from
sql.sqlinto your MySQL database. This will create the required tables (serversandchecks).
- Import the SQL schema from
-
Add Servers
- Use phpMyAdmin or run SQL queries to add servers to the
serverstable.
- Use phpMyAdmin or run SQL queries to add servers to the
| Column | Type | Description |
|---|---|---|
| id | INT | Auto-increment primary key |
| slug | VARCHAR | Unique identifier for the server (used in URLs) |
| name | VARCHAR | Display name for the server |
| description | TEXT | Description of the server |
| order | INT | Display order (lower numbers appear first) |
| display | ENUM | 'public', 'private', 'disabled' — controls visibility |
| status | ENUM | 'up', 'down', 'pending' — suggest pending for new additions |
| uptime | DECIMAL | Uptime percentage (last 30 days, up to 3 decimals) |
| monitored | TINYINT | 1 if you want email alerts, 0 if you don't |
| url | VARCHAR | URL to check for status like https://example.com or https://cpanel.example.com:2087 |
- PHP 8.1 or higher
- MySQL with PDO extension
- cURL extension for PHP
- Web server (Apache recommended; .htaccess provided for clean URLs and HTTPS enforcement)
- Configure your servers in the database.
- The cron job (
cron.php) should be scheduled to run at your desired interval (e.g., every 5 minutes). The frequency in the config file is just to display on the site, but obviously that should match the cron time so that it makes sense. - The web interface will display server status and uptime.
- You will be notified by email when a server is down and also when it comes back up.
- Everything is configured in
config.php. - Possible display options for servers are public, private, and disabled. public displays on home page and can be accessed via slug. private can be accessed via slug but doesn't display on home page. disabled won't display on home page and accessing the slug will return a 403.
- The last checked time on the server page automatically deducts 5 minutes from the actual time of the last check. This is done in case server time isn't quite right. That's very common. In theory, you can just fix this on the server, but if you're running this on shared hosting you may not have access to that.
- ServerStatus just checks for a 200 OK status code. Any other status code or a time out will mean the check is failed.