What are the best practices for securely handling file uploads in PHP to prevent security vulnerabilities or data breaches?

File uploads in PHP can pose security risks if not handled properly. To prevent vulnerabilities or data breaches, it is crucial to validate file types, limit file sizes, and store uploaded files in a secure location with restricted access. Additionally, renaming uploaded files to prevent malicious execution is essential.

// Validate file type and size
$allowedTypes = ['image/jpeg', 'image/png'];
$maxSize = 1048576; // 1MB

if (in_array($_FILES['file']['type'], $allowedTypes) && $_FILES['file']['size'] <= $maxSize) {
    // Store uploaded file in a secure location
    $uploadDir = 'uploads/';
    $uploadFile = $uploadDir . basename($_FILES['file']['name']);

    if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile)) {
        echo 'File uploaded successfully.';
    } else {
        echo 'Failed to upload file.';
    }
} else {
    echo 'Invalid file type or size.';
}