What are the best practices for securely storing and accessing user-uploaded files in PHP applications?

When storing and accessing user-uploaded files in PHP applications, it is crucial to follow best practices to ensure security. One common approach is to store the files outside of the web root directory to prevent direct access by users. Additionally, it is important to validate file types, sanitize file names, and implement proper file permissions to prevent unauthorized access or execution of malicious code.

<?php
// Define the directory to store uploaded files
$uploadDir = '/path/to/uploaded/files/';

// Validate file type before storing
$allowedTypes = ['jpg', 'jpeg', 'png', 'pdf'];
$uploadedFileType = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
if (!in_array($uploadedFileType, $allowedTypes)) {
    die('Invalid file type.');
}

// Sanitize file name before storing
$fileName = uniqid() . '_' . $_FILES['file']['name'];
$filePath = $uploadDir . $fileName;

// Move uploaded file to secure directory
if (move_uploaded_file($_FILES['file']['tmp_name'], $filePath)) {
    echo 'File uploaded successfully.';
} else {
    echo 'Error uploading file.';
}
?>