A modern, secure, and feature-rich PHP file manager with beautiful Bulma UI. Built for standalone use or seamless integration with frameworks like CodeIgniter 4.
π€ Built with Antigravity - This project was developed using AI-assisted coding.
- π Browse & Navigate - Intuitive directory browsing with breadcrumb navigation
- β¬οΈ Upload Files - Drag-and-drop file uploads with progress indicators
- π₯ Download - Single file or multi-file download as ZIP
- βοΈ Rename - Quick inline renaming
- ποΈ Delete - Single or bulk delete with confirmation modal
- π Copy & Paste - Clipboard operations with cut/copy/paste
- π¦ Compress - Create ZIP archives from selected files
- βοΈ Checkbox Selection - Select multiple files with checkboxes
- π― Select All - Quick select/deselect all items
- π§ Bulk Actions - Cut, copy, delete, download selected files
- π― Drag to Move - Drag files/folders into other folders
- π¨ Visual Feedback - Drop targets highlight during drag
- π¦ Multi-Drag - Select multiple items and drag them together
- β Confirmation Modal - Preview move operation before confirming
- πΌοΈ Image Preview - View images with dimensions
- π Text/Code View - Syntax-highlighted code preview
- π PDF Viewer - Inline PDF viewing
- π HEIC Support - Apple HEIC/HEIF image preview and dimensions
- π Authentication - Built-in login with password hashing
- π‘οΈ CSRF Protection - Token-based form protection
- π Path Validation - Prevents directory traversal attacks
- βοΈ Configurable Auth Bypass - Optional for framework integration
- π¨ Bulma CSS - Clean, responsive design
- π Context Menu - Right-click actions
- π Toast Notifications - Non-intrusive feedback
- π± Responsive - Works on desktop and mobile
composer require lifeishex/php-file-manager- Clone or download the repository
- Copy files to your project
- Configure
config.php
Create or modify config.php:
<?php
return [
'fm' => [
'root_path' => '/path/to/managed/files',
'title' => 'File Manager',
'language' => 'en',
'date_format' => 'Y-m-d H:i',
'show_hidden' => false,
// Column visibility β cosmetic only, does NOT restrict operations
'columns' => [
'size' => true,
'owner' => true,
'modified' => true,
'permissions' => true, // Hides the column, NOT the chmod button
],
],
'auth' => [
'require_login' => true,
'username' => 'admin',
'password' => password_hash('your-password', PASSWORD_DEFAULT),
],
'upload' => [
'max_file_size' => 50 * 1024 * 1024,
'chunk_size' => 1 * 1024 * 1024,
'allowed_extensions' => ['*'],
],
'security' => [
'csrf_enabled' => true,
],
// Role-based access control β controls what users can DO
'permissions' => [
'default_role' => 'viewer',
'roles' => [
'admin' => ['*'],
'editor' => ['upload', 'download', 'delete', 'rename', 'new_folder', 'copy', 'move', 'view', 'view_pdf', 'extract', 'zip'],
'viewer' => ['view', 'view_pdf', 'download'],
],
],
];Important
These are two separate and independent settings. Do not confuse them.
| Setting | Purpose | Effect |
|---|---|---|
fm.columns.permissions |
Display only | Hides the permissions column in the file table |
permissions.roles |
Access control | Controls which operations a role can perform |
Example scenarios:
- Hide the permissions column but still allow chmod β
set
columns.permissions = false, keep'permissions'in the role's action list - Show the permissions column but disallow chmod β
set
columns.permissions = true, remove'permissions'from the role's action list - Both hide the column AND disallow chmod β
set
columns.permissions = falseAND remove'permissions'from the role
<?php
require_once 'vendor/autoload.php';
use FileManager\FileManager;
$config = require 'config.php';
$fileManager = new FileManager($config);
$fileManager->run();<?php
// app/Controllers/FileManagerController.php
namespace App\Controllers;
use FileManager\Integration\FileManagerService;
class FileManagerController extends BaseController
{
public function index()
{
$config = [
'fm' => [
'root_path' => WRITEPATH . 'uploads',
'asset_path' => '/filemanager/assets',
],
'auth' => [
'require_login' => false, // Use CI4's auth
],
];
$fileManager = new FileManagerService($config);
return $fileManager->handleRequest();
}
}// Per-user file management
$config['fm']['root_path'] = WRITEPATH . 'uploads/user_' . session()->get('user_id');- PHP 8.3+
- ext-zip - For multi-file ZIP downloads
- ext-mbstring - For proper string handling
HEIC/HEIF files (Apple format) can be previewed in the file manager if a suitable conversion tool is available on the server. The file manager detects tools automatically β no configuration needed.
| Platform | Tool | Install Command |
|---|---|---|
| Linux (Ubuntu/Debian) | ImageMagick + libheif | sudo apt install imagemagick libheif-dev |
| Linux (RHEL/CentOS) | ImageMagick + libheif | sudo dnf install ImageMagick libheif |
| macOS | sips (built-in) |
β No install needed |
| macOS (optional) | ImageMagick | brew install imagemagick |
Note: On Ubuntu, the default
apt install imagemagickpackage (ImageMagick 6) may not include HEIC support. If HEIC conversion fails, verify with:convert -list format | grep HEIFIf not listed, install a version compiled with libheif:sudo apt install imagemagick libheif-dev
Graceful degradation: If no HEIC tool is found, the file manager still works normally β HEIC files can still be uploaded, downloaded, renamed, and deleted. Only the inline preview will be unavailable.
Contributions are welcome! This is an MIT-licensed open-source project.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Mahdi Hezaveh
- GitHub: @LifeIsHex
If you find this project useful, please consider giving it a β on GitHub! Your support helps the project grow and motivates continued development.












