ThinkPHP 3.2.3 版本上傳文件出現“非法上傳文件!”錯誤解決辦法

找到上傳文件類,ThinkPHP/Library/Think/Upload.class.php,找到dealFiles方法

    /**
    * 轉換上傳文件數組變量為正確的方式
     * @access private
     * @param array $files  上傳的文件變量
     * @return array
     */
    private function dealFiles($files) {
        $fileArray  = array();
        $n          = 0;
        foreach ($files as $key=>$file){
            if(is_array($file['name'])) {
                $keys       =   array_keys($file);
                $count      =   count($file['name']);
                for ($i=0; $i<$count; $i++) {
                    $fileArray[$n]['key'] = $key;
                    foreach ($keys as $_key){
                        $fileArray[$n][$_key] = $file[$_key][$i];
                    }
                    $n++;
                }
            }else{
               $fileArray = $files;
               break;
            }
        }
       return $fileArray;
    }

分析到這個方法處理文件是有問題的。上傳多個文件時,傳入$files 的值為

array(5) {
  ["name"]=>
  array(4) {
    [0]=>
    string(9) "組 1.png"
    [1]=>
    string(9) "組 2.png"
    [2]=>
    string(9) "組 3.png"
    [3]=>
    string(0) ""
  }
  ["type"]=>
  array(4) {
    [0]=>
    string(9) "image/png"
    [1]=>
    string(9) "image/png"
    [2]=>
    string(9) "image/png"
    [3]=>
    string(0) ""
  }
  ["tmp_name"]=>
  array(4) {
    [0]=>
    string(25) "C:\wamp64\tmp\phpE05E.tmp"
    [1]=>
    string(25) "C:\wamp64\tmp\phpE06F.tmp"
    [2]=>
    string(25) "C:\wamp64\tmp\phpE07F.tmp"
    [3]=>
    string(0) ""
  }
  ["error"]=>
  array(4) {
    [0]=>
    int(0)
    [1]=>
    int(0)
    [2]=>
    int(0)
    [3]=>
    int(4)
  }
  ["size"]=>
  array(4) {
    [0]=>
    int(19604)
    [1]=>
    int(28297)
    [2]=>
    int(35891)
    [3]=>
    int(0)
  }
}

按道理來說此處應該是將這個數據處理成如下形式:

array(4) {
  [0]=>
  array(5) {
    ["name"]=>
    string(9) "組 1.png"
    ["type"]=>
    string(9) "image/png"
    ["tmp_name"]=>
    string(25) "C:\wamp64\tmp\php9212.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(19604)
  }
  [1]=>
  array(5) {
    ["name"]=>
    string(9) "組 2.png"
    ["type"]=>
    string(9) "image/png"
    ["tmp_name"]=>
    string(25) "C:\wamp64\tmp\php9213.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(28297)
  }
  [2]=>
  array(5) {
    ["name"]=>
    string(9) "組 3.png"
    ["type"]=>
    string(9) "image/png"
    ["tmp_name"]=>
    string(25) "C:\wamp64\tmp\php9223.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(35891)
  }
  [3]=>
  array(5) {
    ["name"]=>
    string(0) ""
    ["type"]=>
    string(0) ""
    ["tmp_name"]=>
    string(0) ""
    ["error"]=>
    int(4)
    ["size"]=>
    int(0)
  }
}

仔細分析此方法,并且修改這個方法如下,可修復“非法上傳文件!”這個錯誤:

private function dealFiles($files) {
        $fileArray  = array();
        $n          = 0;
        if(is_array($files['name'])) {
            $keys       =   array_keys($files);
            foreach ($files['name'] as $key => $value) {
                foreach ($keys as $_key){
                    $fileArray[$n][$_key] = $files[$_key][$key];
                }
                $n++;
            }
        }else{
           $fileArray = $files; // 單個文件上傳
        }
       return $fileArray;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容