What are some best practices for handling file uploads in PHP to ensure successful execution?

When handling file uploads in PHP, it is important to ensure that the file is uploaded successfully and securely. One best practice is to check the file size and type before allowing the upload to prevent malicious files from being uploaded to your server. Additionally, always move the uploaded file to a secure directory outside of the web root to prevent direct access to the files.

<?php
// Check if file is uploaded successfully
if ($_FILES['file']['error'] !== UPLOAD_ERR_OK) {
    die("Upload failed with error code " . $_FILES['file']['error']);
}

// Check file size
if ($_FILES['file']['size'] > 1000000) {
    die("File is too large");
}

// Check file type
$allowedTypes = ['image/jpeg', 'image/png'];
if (!in_array($_FILES['file']['type'], $allowedTypes)) {
    die("Invalid file type. Allowed types: jpeg, png");
}

// Move uploaded file to secure directory
$uploadDir = 'uploads/';
$uploadFile = $uploadDir . basename($_FILES['file']['name']);
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile)) {
    echo "File is valid, and was successfully uploaded.";
} else {
    echo "Upload failed";
}
?>