What are the security considerations to keep in mind when handling file uploads in PHP, especially when dealing with user-submitted content?

When handling file uploads in PHP, especially with user-submitted content, it's crucial to validate and sanitize the uploaded files to prevent malicious files from being executed on the server. Ensure that file extensions are restricted to only allow specific file types, validate file sizes to prevent large files from overwhelming the server, and store uploaded files in a secure directory outside the web root to prevent direct access.

// Example PHP code snippet for handling file uploads securely
$targetDir = 'uploads/';
$allowedExtensions = ['jpg', 'png', 'gif'];
$maxFileSize = 5 * 1024 * 1024; // 5MB

if(isset($_FILES['file'])) {
    $file = $_FILES['file'];
    
    $fileName = basename($file['name']);
    $fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));

    if(in_array($fileExt, $allowedExtensions) && $file['size'] <= $maxFileSize) {
        $targetPath = $targetDir . $fileName;
        
        if(move_uploaded_file($file['tmp_name'], $targetPath)) {
            echo 'File uploaded successfully.';
        } else {
            echo 'Error uploading file.';
        }
    } else {
        echo 'Invalid file format or size.';
    }
}