首页  >  文章  >  数据库  >  为什么我的 PHP 文件上传验证代码无法正常工作?

为什么我的 PHP 文件上传验证代码无法正常工作?

Barbara Streisand
Barbara Streisand原创
2024-11-03 11:55:03623浏览

Why Is My PHP File Upload Validation Code Not Working Correctly?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn