What security considerations should be taken into account when allowing file uploads through a PHP form?

When allowing file uploads through a PHP form, it is crucial to validate and sanitize the file before saving it on the server. This includes checking the file type, size, and ensuring it does not contain any malicious code. Additionally, it is recommended to store uploaded files outside of the web root directory to prevent direct access to them.

// Check if file is uploaded
if(isset($_FILES['uploaded_file'])){
    $file = $_FILES['uploaded_file'];

    // Validate file type
    $allowed_types = array('image/jpeg', 'image/png', 'image/gif');
    if(!in_array($file['type'], $allowed_types)){
        die('Invalid file type. Allowed types: jpeg, png, gif');
    }

    // Validate file size
    if($file['size'] > 5000000){
        die('File size is too large. Max size: 5MB');
    }

    // Sanitize file name
    $file_name = preg_replace("/[^A-Za-z0-9\.]/", '_', $file['name']);

    // Move file to desired directory
    move_uploaded_file($file['tmp_name'], 'uploads/' . $file_name);
}