首頁 >資料庫 >mysql教程 >為什麼我的 PHP 檔案上傳驗證程式碼無法正常運作?

為什麼我的 PHP 檔案上傳驗證程式碼無法正常運作?

Barbara Streisand
Barbara Streisand原創
2024-11-03 11:55:03629瀏覽

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