What are common best practices for handling file uploads in PHP to ensure security and efficiency?

When handling file uploads in PHP, it is important to validate the file type and size to prevent malicious uploads and potential security vulnerabilities. Additionally, storing uploaded files in a secure directory outside of the web root can help prevent unauthorized access. Using functions like move_uploaded_file() to handle file uploads can also ensure efficiency and security.

if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
    $fileType = $_FILES['file']['type'];
    $fileSize = $_FILES['file']['size'];

    $allowedTypes = ['image/jpeg', 'image/png'];
    $maxFileSize = 1048576; // 1MB

    if (in_array($fileType, $allowedTypes) && $fileSize <= $maxFileSize) {
        $uploadDir = '/path/to/secure/directory/';
        $uploadFile = $uploadDir . basename($_FILES['file']['name']);

        if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile)) {
            echo 'File uploaded successfully.';
        } else {
            echo 'Error uploading file.';
        }
    } else {
        echo 'Invalid file type or size.';
    }
} else {
    echo 'Error uploading file.';
}