What are the potential pitfalls of using $_FILES in PHP for file uploads?

One potential pitfall of using $_FILES in PHP for file uploads is that it can be vulnerable to security risks such as file injection attacks. To mitigate this risk, it is important to validate and sanitize the file before moving it to the desired location on the server. Additionally, setting appropriate file size and file type restrictions can help prevent malicious uploads.

// Example of validating and sanitizing file upload using $_FILES

// Check if file was uploaded without errors
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
    $file_name = $_FILES['file']['name'];
    $file_tmp = $_FILES['file']['tmp_name'];
    
    // Validate file type
    $file_type = mime_content_type($file_tmp);
    if ($file_type !== 'image/jpeg' && $file_type !== 'image/png') {
        echo 'Invalid file type. Please upload a JPEG or PNG file.';
        exit;
    }
    
    // Move the file to desired location
    $upload_path = 'uploads/' . $file_name;
    if (move_uploaded_file($file_tmp, $upload_path)) {
        echo 'File uploaded successfully.';
    } else {
        echo 'Failed to upload file.';
    }
} else {
    echo 'Error uploading file.';
}