PHP 文件上传:确保文件类型和大小限制
在 PHP 中,处理文件上传通常需要验证文件类型和大小限制。提供的代码片段尝试验证这两个标准,但遇到了问题。让我们深入研究代码并找出错误。
<code class="php">//check file extension and size $resume = ($_FILES['resume']['name']); $reference = ($_FILES['reference']['name']); $ext = strrchr($resume, "."); $ext1 = strrchr($reference, ".");</code>
此代码捕获两个文件的文件名和扩展名。然而,后续的验证逻辑存在缺陷:
<code class="php">if (!( ($_FILES["resume"]["type"] == "application/doc") || ($_FILES["resume"]["type"] == "application/docx") || ($_FILES["resume"]["type"] == "application/pdf") && (($_FILES["reference"]["type"] == "application/doc") || ($_FILES["reference"]["type"] == "application/docx") || ($_FILES["reference"]["type"] == "application/pdf")) && (($ext == ".pdf") || ($ext == ".doc") || ($ext == ".docx")) && (($ext1 == ".pdf") || ($ext1 == ".doc") || ($ext1 == ".docx")) && ($_FILES["resume"]["size"] < 400000) //accept upto 500 kb && ($_FILES["reference"]["size"] < 400000) )) { //stop user } else { //allow files to upload }</code>
代码无法使用正确的逻辑来验证文件类型。它不检查 MIME 类型,而是依赖文件扩展名,这是不可靠的。此外,大小验证不适用于这两个文件。
为了纠正这些问题,这里有一个修改后的代码片段,它使用 MIME 类型并正确检查两个文件大小:
<code class="php">function allowed_file() { $allowed = array('application/doc', 'application/pdf', 'application/docx'); if (in_array($_FILES['resume']['type'], $allowed) && in_array($_FILES['reference']['type'], $allowed)) { if ($_FILES["resume"]["size"] < 400000 && $_FILES["reference"]["size"] < 400000) { // Begin file upload here... } } }</code>
此代码首先检查文件的 MIME 类型是否包含在允许列表中。如果是,则它会验证两个文件大小是否在指定限制内。这可确保仅接受允许的文件类型和大小进行上传。
以上是为什么我的 PHP 文件上传验证代码无法正常工作?的详细内容。更多信息请关注PHP中文网其他相关文章!