Are there any best practices for handling image uploads in PHP to ensure security?

When handling image uploads in PHP, it is crucial to ensure the security of the application to prevent malicious uploads. One best practice is to validate the file type and size before allowing the upload to ensure that only images are accepted. Additionally, it is recommended to store the uploaded images outside of the web root directory to prevent direct access to them.

// Validate file type and size
$allowed_types = ['image/jpeg', 'image/png', 'image/gif'];
$max_size = 5 * 1024 * 1024; // 5MB

if (!in_array($_FILES['image']['type'], $allowed_types) || $_FILES['image']['size'] > $max_size) {
    die('Invalid file type or size.');
}

// Store uploaded image outside of web root directory
$upload_dir = '/path/to/uploads/';
$upload_file = $upload_dir . basename($_FILES['image']['name']);

if (move_uploaded_file($_FILES['image']['tmp_name'], $upload_file)) {
    echo 'File uploaded successfully.';
} else {
    echo 'Error uploading file.';
}