回覆列表
  • 1 # Peterduan967

    出現不想讓使用者看見的資訊,可以使用錯誤抑制符號@;當然能echo的東西都是可以賦值給一個變數的;

    定義使用者上傳檔案型別,將其放在陣列變數allowExt中,用if(!in_array(第一個引數為獲取上傳檔案的字尾名,可以使用strtolower函式來判定 點號‘ .’之後的字尾名,或者也可以用自帶擴充套件函式pathinfo(file的名字,PATHINFO_EXTENSION)來判定,第二個引數就是允許上傳的型別的陣列變數allowExt);但是這種情況下,使用者萬一上傳上來一個病毒資訊,只是改了字尾名,就要用到getimagesize來獲取圖片的資訊,基本資訊會有圖片的寬度和高度以及型別,部分還會有channel和bits;如果允許使用者上傳的不僅僅是圖片型別,則使用flag的布林值進行判定;

    還要注意的是使用者上傳的檔案的命名,不能存在重名覆蓋現象,可以使用md5(uniqid(microtime(true),true))或類似函式進行判定;

    有的時候使用者需要上傳到自己的某個目錄下,則可以用if(!files_exit(path))進行判定,不存在就用mkdir ($path,0777,true)來自定義上傳的路徑;

    在各種判定之後,可以將這個檔案封裝成一個函式,將下文中會使用到的變數設定為該函式的引數,在呼叫時可以傳參,在單檔案多檔案上傳的時候可以直接呼叫函式即可,大大簡化程式碼量;

    單檔案上傳基本思路也就是:先檢測錯誤資訊,一一匹配,用switch……case輸出對應的錯誤資訊------》檢測檔案上傳的型別是否是自己定義的陣列中的某一個-----》檢測上傳檔案是否滿足規範中的大小要求----》檢測檔案圖片等內容是否是真實的圖片型別等(用flag和getimagesize獲取資訊)----》檢測檔案是否透過http post方法傳上來的----》定義檔案上傳進來的名字和路徑(此時需要檢測路徑是否存在以及同名檔案是否存在,採用加密方式重新命名)---》上傳成功,返回具體的陣列變數或者上傳檔名。

  • 中秋節和大豐收的關聯?
  • 英雄殺看身份怎麼看的又快又準?