What are some best practices for handling file uploads in PHP to ensure compatibility with a wide range of file types and browsers?

When handling file uploads in PHP, it is important to ensure compatibility with a wide range of file types and browsers. One way to achieve this is by checking the file type and size before processing the upload. Additionally, using a secure file upload directory and implementing proper error handling can help prevent potential security vulnerabilities.

<?php
// Check if the file is a valid type
$allowedTypes = ['image/jpeg', 'image/png', 'application/pdf'];
if (!in_array($_FILES['file']['type'], $allowedTypes)) {
    die('Invalid file type. Please upload a JPEG, PNG, or PDF file.');
}

// Check if the file size is within limits
$maxFileSize = 5242880; // 5MB
if ($_FILES['file']['size'] > $maxFileSize) {
    die('File size exceeds limit. Please upload a file smaller than 5MB.');
}

// Move the uploaded file to a secure directory
$uploadDir = 'uploads/';
$uploadFile = $uploadDir . basename($_FILES['file']['name']);
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile)) {
    echo 'File uploaded successfully.';
} else {
    echo 'Error uploading file.';
}
?>