What best practices should be followed when processing file uploads in PHP to prevent potential vulnerabilities?

When processing file uploads in PHP, it is essential to follow best practices to prevent potential vulnerabilities such as file injection attacks. One common approach is to validate the file type and size before allowing the upload to ensure it is safe. Additionally, storing the uploaded files outside of the web root directory can prevent direct access to them by malicious users.

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

if (in_array($_FILES['file']['type'], $allowedTypes) && $_FILES['file']['size'] <= $maxFileSize) {
    // Move uploaded file to a secure directory outside of web root
    move_uploaded_file($_FILES['file']['tmp_name'], '/path/to/uploads/' . $_FILES['file']['name']);
    echo 'File uploaded successfully.';
} else {
    echo 'Invalid file type or size.';
}