What are the best practices for file uploading in PHP to ensure security and functionality?

When uploading files in PHP, it is crucial to implement security measures to prevent malicious file uploads. One common practice is to restrict file types, validate file size, and save files outside of the web root directory to prevent direct access. Additionally, renaming uploaded files to prevent overwriting existing files is recommended.

// Example PHP code snippet for secure file uploading
$uploadDir = '/path/to/upload/directory/';
$allowedTypes = ['jpg', 'jpeg', 'png'];
$maxFileSize = 1048576; // 1MB

if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
    $fileExtension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
    if (in_array($fileExtension, $allowedTypes) && $_FILES['file']['size'] <= $maxFileSize) {
        $newFileName = uniqid() . '.' . $fileExtension;
        move_uploaded_file($_FILES['file']['tmp_name'], $uploadDir . $newFileName);
        echo 'File uploaded successfully.';
    } else {
        echo 'Invalid file type or size.';
    }
} else {
    echo 'Error uploading file.';
}