I wrote some code to upload multiple files to a server with PHP and JavaScript. I'm happy with the form and JavaScript, below. <form method="post" enctype="multipart/form-data"> <input type="file" name="files[]" multiple> <input type="submit" value="Upload File" name="submit"> </form> <script> const url = 'process.php'; const submit = document.querySelector('[type=submit]'); submit.addEventListener('click', e => { e.preventDefault(); const files = document.querySelector('[type=file]').files; const formData = new FormData(); for (let i = 0; i < files.length; i++) { let file = files[i]; formData.append('files[]', file); } fetch(url, { method: 'POST', body: formData }).then(response => { console.log(response); }); }); </script> I would appreciate a review of the PHP for handling the `$_POST` request. I tried to make it as simple as possible, but I'm not sure if there are any major security concerns I'm overlooking. Thanks! <?php if ($_SERVER["REQUEST_METHOD"] === 'POST') { if (isset($_FILES['files'])) { $errors = []; $path = 'uploads/'; $extensions = ['jpg', 'jpeg', 'png', 'gif', 'html', 'txt', 'pdf', 'doc']; $allFiles = count($_FILES['files']['tmp_name']); for ($i = 0; $i < $allFiles; $i++) { try { $file_name = $_FILES['files']['name'][$i]; $file_tmp = $_FILES['files']['tmp_name'][$i]; $file_type = $_FILES['files']['type'][$i]; $file_ext = strtolower(end(explode('.', $_FILES['files']['name'][$i]))); $file = $path . $file_name; if (!in_array($file_ext, $extensions)) { throw new Exception('Extension not allowed: ' . $file_name . ' ' . $file_type . "\n"); } if ($file_size > 2097152) { // 2MB throw new Exception('File size exceeds limit: ' . $file_name . ' ' . $file_type. "\n"); } move_uploaded_file($file_tmp, $file); } catch (Exception $e) { error_log($e->getMessage(), 3, '/path/to/error_log'); } } } }