What potential pitfalls should be considered when passing an upload to a function in PHP?

When passing an upload to a function in PHP, potential pitfalls to consider include ensuring that the file is properly sanitized to prevent security vulnerabilities such as directory traversal attacks or code injection. It is important to validate the file type and size to prevent malicious uploads. Additionally, consider implementing proper error handling to gracefully handle any issues that may arise during the upload process.

// Example code snippet for passing an upload to a function in PHP with proper validation and error handling

function processUpload($file) {
    // Check if file is actually uploaded
    if ($file['error'] !== UPLOAD_ERR_OK) {
        throw new Exception('File upload error: ' . $file['error']);
    }

    // Validate file type
    $allowedTypes = ['image/jpeg', 'image/png'];
    if (!in_array($file['type'], $allowedTypes)) {
        throw new Exception('Invalid file type. Allowed types: ' . implode(', ', $allowedTypes));
    }

    // Validate file size
    $maxSize = 1048576; // 1MB
    if ($file['size'] > $maxSize) {
        throw new Exception('File size exceeds limit of ' . $maxSize);
    }

    // Process the uploaded file
    // Your code here
}

// Example usage
try {
    processUpload($_FILES['uploaded_file']);
    echo 'File uploaded successfully!';
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}