What are some best practices for handling file uploads in PHP to ensure data integrity and prevent errors?

When handling file uploads in PHP, it is important to validate the file type, size, and ensure data integrity to prevent errors and security vulnerabilities. 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.

// Check if file was uploaded without errors
if(isset($_FILES['file']) && $_FILES['file']['error'] == 0){
    $file_name = $_FILES['file']['name'];
    $file_size = $_FILES['file']['size'];
    $file_tmp = $_FILES['file']['tmp_name'];
    
    // Validate file type
    $file_type = pathinfo($file_name, PATHINFO_EXTENSION);
    if($file_type != "jpg" && $file_type != "png" && $file_type != "jpeg" && $file_type != "gif"){
        echo "Only JPG, JPEG, PNG & GIF files are allowed.";
        exit();
    }
    
    // Validate file size
    if($file_size > 5000000){
        echo "File size must be less than 5MB";
        exit();
    }
    
    // Move uploaded file to designated directory
    move_uploaded_file($file_tmp, "uploads/".$file_name);
    echo "File uploaded successfully";
} else {
    echo "Error uploading file";
}