How can PHP developers ensure that uploaded files are securely handled and processed to prevent errors and vulnerabilities?

To ensure that uploaded files are securely handled and processed in PHP, developers should validate file types, restrict file sizes, and store files in a secure directory outside of the web root. Additionally, developers should sanitize file names to prevent directory traversal attacks and use functions like move_uploaded_file() to move files to the designated directory securely.

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

// Restrict file size
$maxFileSize = 5 * 1024 * 1024; // 5MB
if ($_FILES['file']['size'] > $maxFileSize) {
    die('File size exceeds limit.');
}

// Sanitize file name
$cleanFileName = preg_replace("/[^A-Za-z0-9.]/", '', $_FILES['file']['name']);

// Move file to secure directory
$uploadDirectory = '/path/to/secure/directory/';
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadDirectory . $cleanFileName)) {
    echo 'File uploaded successfully.';
} else {
    echo 'File upload failed.';
}