What are the potential security risks associated with allowing users to upload files of any type in PHP, and how can they be addressed?

Allowing users to upload files of any type in PHP can pose security risks such as potential execution of malicious scripts, denial of service attacks, and unauthorized access to sensitive information. To address these risks, it is important to validate file types, restrict file sizes, and store uploaded files in a secure directory with proper permissions.

<?php
// Limit file types to only allow specific extensions
$allowed_extensions = array('jpg', 'jpeg', 'png', 'gif');
$uploaded_file_extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);

if (!in_array($uploaded_file_extension, $allowed_extensions)) {
    die('Invalid file type. Only JPG, JPEG, PNG, and GIF files are allowed.');
}

// Limit file size to prevent denial of service attacks
$max_file_size = 1048576; // 1MB
if ($_FILES['file']['size'] > $max_file_size) {
    die('File size exceeds the limit of 1MB.');
}

// Store uploaded files in a secure directory with proper permissions
$upload_directory = 'uploads/';
$uploaded_file_path = $upload_directory . $_FILES['file']['name'];

if (!move_uploaded_file($_FILES['file']['tmp_name'], $uploaded_file_path)) {
    die('Failed to upload file.');
}

echo 'File uploaded successfully.';
?>