What are some best practices for implementing a file manager in PHP for user uploads?
When implementing a file manager in PHP for user uploads, it is important to ensure proper security measures are in place to prevent unauthorized access or malicious file uploads. One best practice is to store uploaded files outside of the web root directory to prevent direct access. Additionally, validate file types, size, and sanitize file names to prevent any potential security vulnerabilities.
<?php
// Define upload directory outside of web root
$uploadDirectory = '/path/to/uploads/';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
$file = $_FILES['file'];
// Validate file type
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($file['type'], $allowedTypes)) {
die('Invalid file type. Allowed types: jpeg, png, gif');
}
// Validate file size
if ($file['size'] > 5242880) { // 5MB
die('File size exceeds limit');
}
// Sanitize file name
$fileName = preg_replace("/[^A-Za-z0-9.]/", '_', $file['name']);
// Move uploaded file to upload directory
if (move_uploaded_file($file['tmp_name'], $uploadDirectory . $fileName)) {
echo 'File uploaded successfully';
} else {
echo 'Error uploading file';
}
}
?>