What best practices should be followed when allowing users to upload changes to a CVS project through a web interface using PHP?

When allowing users to upload changes to a CVS project through a web interface using PHP, it is important to validate and sanitize user input to prevent security vulnerabilities such as code injection or file upload attacks. Additionally, it is recommended to restrict file types that can be uploaded and implement proper file permissions to ensure that only authorized users can make changes to the project.

// Validate and sanitize user input
if(isset($_FILES['file']) && $_FILES['file']['error'] === UPLOAD_ERR_OK) {
    $file_name = basename($_FILES['file']['name']);
    $file_path = '/path/to/uploaded/files/' . $file_name;
    
    // Restrict file types that can be uploaded
    $allowed_extensions = array('txt', 'csv', 'pdf');
    $file_extension = pathinfo($file_name, PATHINFO_EXTENSION);
    
    if(!in_array($file_extension, $allowed_extensions)) {
        die('Invalid file type. Only txt, csv, and pdf files are allowed.');
    }
    
    // Move uploaded file to specified directory
    if(move_uploaded_file($_FILES['file']['tmp_name'], $file_path)) {
        echo 'File uploaded successfully.';
    } else {
        echo 'Error uploading file.';
    }
} else {
    echo 'Error uploading file.';
}