What are some best practices for handling file uploads in PHP, particularly in the context of content management systems (CMS)?

When handling file uploads in PHP, particularly in the context of CMS, it is essential to validate the file type, size, and ensure secure storage to prevent security vulnerabilities such as file injection attacks. One best practice is to use PHP's built-in functions like `move_uploaded_file()` to securely move the uploaded file to a designated directory on the server.

<?php
// Check if file was uploaded without errors
if(isset($_FILES["file"]) && $_FILES["file"]["error"] == 0){
    $target_dir = "uploads/";
    $target_file = $target_dir . basename($_FILES["file"]["name"]);
    $file_type = pathinfo($target_file, PATHINFO_EXTENSION);

    // Validate file type
    $allowed_types = array("jpg", "png", "jpeg", "gif");
    if(!in_array($file_type, $allowed_types)){
        echo "Invalid file type. Allowed types: jpg, png, jpeg, gif";
    } else {
        // Move the file to the uploads directory
        if(move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)){
            echo "File uploaded successfully.";
        } else {
            echo "Error uploading file.";
        }
    }
} else {
    echo "Error uploading file.";
}
?>