」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼我的 PHP 檔案上傳驗證程式碼無法正常運作?

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

發佈於2024-11-15
瀏覽:682

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

PHP 檔案上傳:確保檔案類型和大小限制

在 PHP 中,處理檔案上傳通常需要驗證檔案類型和大小限制。提供的程式碼片段嘗試驗證這兩個標準,但遇到了問題。讓我們深入研究程式碼並找出錯誤。

//check file extension and size
$resume = ($_FILES['resume']['name']);
$reference = ($_FILES['reference']['name']);
$ext = strrchr($resume, ".");
$ext1 = strrchr($reference, ".");

此程式碼擷取兩個檔案的檔案名稱和副檔名。但後續的驗證邏輯是有缺陷的:

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"] 

程式碼無法使用正確的邏輯來驗證檔案類型。它不檢查 MIME 類型,而是依賴檔案副檔名,這是不可靠的。此外,大小驗證不適用於這兩個檔案。

為了修正這些問題,這裡有一個修改後的程式碼片段,它使用 MIME 類型並正確檢查兩個檔案大小:

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"] 

此程式碼首先檢查檔案的 MIME 類型是否包含在允許的清單中。如果是,則它會驗證兩個檔案大小是否在指定限制內。這可確保僅接受允許的檔案類型和大小進行上傳。

最新教學 更多>
  • 如何在 PHP 中將數字四捨五入到最接近的 10?
    如何在 PHP 中將數字四捨五入到最接近的 10?
    在 PHP 中將數字四捨五入到最接近的 10將數字四捨五入到最接近的 10 是編程中的常見任務。 PHP 提供了幾個用於對數字進行四捨五入的內建函數,包括 Floor()、ceil() 和 round()。 要將數字四捨五入到最接近的 10,我們可以使用 ceil() 函數。 ceil() 將數字向...
    程式設計 發佈於2024-11-15
  • 為什麼 Golang 沒有原生的 Set 資料結構?
    為什麼 Golang 沒有原生的 Set 資料結構?
    Golang 奇怪地缺乏集合資料結構在Golang 中,對集合資料結構的基本需求導致了一個令人困惑的問題:為什麼不是原生提供的嗎?從 Google 頗具影響力的 Guava 庫中汲取靈感,為什麼 Golang 的設計者省略了對這樣一個基本結構的支持,迫使開發人員自己設計實現? 答案在於使用映射來建立...
    程式設計 發佈於2024-11-15
  • 非常量成員函數和常數成員函數之間的「this」指標型別有什麼差別?
    非常量成員函數和常數成員函數之間的「this」指標型別有什麼差別?
    理解「This」指標的型別「this」指標是指指向其成員函數所在物件的指標稱為。它由編譯器自動提供,用於存取物件的成員。 「this」指標的類型取決於是否在非常量成員函數或常數成員函數中存取它。 在非常量成員函數中,“this”的類型為“ClassName *”,其中ClassName 是類別的名稱...
    程式設計 發佈於2024-11-15
  • 棘手的 Golang 面試問題 - Max 部分 goroutine 編號
    棘手的 Golang 面試問題 - Max 部分 goroutine 編號
    在 Go 面試中,有時會讓應徵者措手不及的一個問題是「可以產生的 goroutine 的最大數量」。答案並不像說出一個具體數字那麼簡單。相反,面試官通常使用這個問題來評估您對 Go 並發模型、記憶體管理以及 goroutine 實踐經驗的理解。 以下是有效回答此問題的簡明指南: 理...
    程式設計 發佈於2024-11-15
  • 如何在 PHP 的 foreach 迴圈中存取元素的索引?
    如何在 PHP 的 foreach 迴圈中存取元素的索引?
    確定 foreach 索引foreach 循環提供了一種迭代數組的便捷方法,但顯示每個元素的索引可以是挑戰。與傳統的 for 迴圈不同,似乎無法直接存取索引變數。 使用Fo​​r 迴圈在for 迴圈中,可以明確遞增索引,如下所示:for ($i = 0; $i < 10; $i) { ...
    程式設計 發佈於2024-11-15
  • 如何防止 Goroutine 中 HTTP 請求逾時後繼續?
    如何防止 Goroutine 中 HTTP 請求逾時後繼續?
    Goroutine Timeout提供的函數 Find() 使用 goroutine 發出一系列 HTTP 請求並處理它們的回應。然而,令人擔憂的是,即使這些請求超過了指定的逾時時間,這些請求也會在後台繼續運作。 潛在的 Goroutine 洩漏不太可能存在 Goroutine 洩漏代碼。當Find...
    程式設計 發佈於2024-11-15
  • 如何在 PHP 中從陣列中檢索物件屬性列?
    如何在 PHP 中從陣列中檢索物件屬性列?
    從陣列中擷取物件屬性列在應用程式中,通常需要從物件清單中提取特定屬性。這個任務可以在 PHP 中有效率地完成,特別是在較新的語言版本。 使用 array_column() 提取屬性PHP 7.0 及更高版本引入了 array_column() 函數,專為此目的而設計。要擷取一列屬性值,只要將cats...
    程式設計 發佈於2024-11-15
  • 私有資料成員與公共變數:什麼時候應該使用 Getter 和 Setter?
    私有資料成員與公共變數:什麼時候應該使用 Getter 和 Setter?
    透過存取控制平衡私有資料成員在物件導向程式設計中,使用私有資料成員與公用getter 和setter 與使用私有資料成員與公共getter 和setter 之間的爭論公開所有變數仍然是一個討論的話題。 私有資料成員和存取控制私有資料成員的主要目的是強制封裝和資料抽象,確保資料完整性和存取控制。透過限...
    程式設計 發佈於2024-11-15
  • Gdevelop o 代碼遊戲引擎功能。
    Gdevelop o 代碼遊戲引擎功能。
    如果你的專案規模不是那麼大,現在的遊戲開發變得很容易。 我使用 Unity 遊戲引擎來開發遊戲,但我厭倦了為腳本檔案編寫或生成程式碼。 我了解了 Gdevelop 5 遊戲引擎。它需要零編碼,但需要一點物理和數學知識。 您可以透過拖放遊戲物件來創建遊戲。 最佳功能: 只需設計精靈和行為 平台...
    程式設計 發佈於2024-11-15
  • 使用PHP的Substr函數時如何保持單字邊界?
    使用PHP的Substr函數時如何保持單字邊界?
    在PHP 的Substr 中維護單字邊界在Web 開發中,通常需要截斷字串以適應特定的約束,例如資料庫欄位或使用者介面中的字元限制。 PHP substr 函數提供了一種提取子字串的便捷方法,但預設情況下,它不考慮單字邊界。這可能會導致尷尬的截斷,在中間分割單字。 要確保截斷的字串在單字邊界上結束,...
    程式設計 發佈於2024-11-15
  • \“主要是模組和導入導出-package.json!\”
    \“主要是模組和導入導出-package.json!\”
    这里有一个有趣且引人入胜的方式来解释为什么所有四个字段 - module、main、exports 和 import——package.json 中需要: 为什么所有四个字段都很重要: 主要:经典看门人 角色:将 main 视为包中明智的老圣人。它自 Node.js 诞生以来就一直存...
    程式設計 發佈於2024-11-15
  • -?什麼是紗線?
    -?什麼是紗線?
    當您正在處理一個專案時,請看到一個yarn.lock 檔案盯著您,您可能會想,「什麼是yarn?」。那麼就讓我們開始吧。 Yarn 是主要的 JS 套件管理器之一,用於管理 JS 專案中的依賴項(套件和庫)。 套件管理器是幫助開發人員處理專案所需的外部程式庫和模組的工具 → 自動化安裝、更新和...
    程式設計 發佈於2024-11-15
  • 如何辨識 Golang 字串中的特殊字元?
    如何辨識 Golang 字串中的特殊字元?
    在Golang中識別字串中的特殊字元在GoLang中,檢查字串中的特殊字元需要特定的方法。當遇到從使用者輸入獲得的字串時,確保其有效性通常需要驗證是否存在惡意或不需要的字元。本文探討了兩種偵測字串中特殊字元的方法。 方法 1:使用 strings.ContainsAny()strings.Conta...
    程式設計 發佈於2024-11-15
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1和$array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建構一...
    程式設計 發佈於2024-11-15
  • 如何判斷雙精確度浮點數是否為整數?
    如何判斷雙精確度浮點數是否為整數?
    驗證 Double 的整數狀態確定雙精確度浮點數是否為整數值在各種程式設計中非常有用場景。在提供的程式碼片段中:double variable; variable = 5; /* the below should return true, since 5 is an int. if variable...
    程式設計 發佈於2024-11-15

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3