What security measures should be implemented when allowing file uploads in PHP?

When allowing file uploads in PHP, it is crucial to implement security measures to prevent malicious files from being uploaded to your server. One important measure is to restrict the file types that can be uploaded and ensure that only allowed file types are accepted. Additionally, it is recommended to store uploaded files in a separate directory outside of the web root to prevent direct access. Finally, always validate and sanitize file names to prevent directory traversal attacks.

// Example code to implement security measures for file uploads in PHP

// Define allowed file types
$allowed_file_types = array('jpg', 'jpeg', 'png', 'gif');

// Check if file type is allowed
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
if (!in_array($extension, $allowed_file_types)) {
    die('Error: Invalid file type.');
}

// Store uploaded file in a secure directory
$upload_dir = '/path/to/secure/directory/';
$upload_file = $upload_dir . basename($_FILES['file']['name']);
move_uploaded_file($_FILES['file']['tmp_name'], $upload_file);

// Sanitize file name to prevent directory traversal attacks
$upload_file = $upload_dir . uniqid() . '.' . $extension;
move_uploaded_file($_FILES['file']['tmp_name'], $upload_file);